如何在 xmgrace 中制作正确的动画图形?
How to make proper animated graph in xmgrace?
我有一系列数据文件,我只是想在电影文件中显示它们,其中对于每种数据文件颜色,图例都会发生变化。所以我尝试了如下所示:
for i in *dat; do gracebat $i -batch setup.batch -printfile fig-$i.png -hdevice PNG -hardcopy; done
之后,我使用常用的 convert
命令从 PNG 文件制作电影:
convert -delay 50 fig-*.png animation.gif
这会产生如下影片:
现在我想根据数据点更改每一帧的颜色和图例。我知道需要更改 setup.batch
文件中的某些内容,但我无法弄清楚我应该在那里写什么?谁能帮我一下?
setup.batch
文件如下所示:
TITLE "Energy barrier"
WORLD XMIN 0
WORLD XMAX 2
WORLD YMIN 0
WORLD YMAX 0.6
XAXIS TICK MAJOR 0.5
XAXIS TICK MINOR 0.25
YAXIS TICK MAJOR 0.1
YAXIS TICK MINOR 0.05
s0 LINE LINEWIDTH 2.0
如果有人想在每一帧中保留情节而不是在一帧中只显示一个情节,那将非常有帮助。例如,现在它在每一步只显示一条线,但是如果我保留以前的图,那么在第 8 帧我可以显示所有 8 个图会怎样?
一种选择是制作与数据文件数量一样多的批处理文件。下面的bash
脚本会自动生成批处理文件。
#!/bin/bash
rm -f temp.batch
c=0;
for fullname in `find . -name "*.dat"`; do
# Extract filename without extension
fname=$(basename "$fullname")
fname="${fname%.*}"
# Keeping the plots in each frame
echo READ BLOCK \"${fname}.dat\" >> temp.batch
echo BLOCK xy \"1:2\" >> temp.batch
echo s$c LINE LINEWIDTH 2.0 >> temp.batch
echo s$c LINE COLOR $((c+1)) >> temp.batch # change the colour
echo >> temp.batch # a blank line for readability
cat temp.batch >> plot${fname}.batch
# Set formatting and other global options
echo WORLD XMIN 0 > plot${fname}.batch # create or overwrite file
echo WORLD XMAX 2 >> plot${fname}.batch
echo WORLD YMIN 0 >> plot${fname}.batch
echo WORLD YMAX 0.6 >> plot${fname}.batch
echo XAXIS TICK MAJOR 0.5 >> plot${fname}.batch
echo XAXIS TICK MINOR 0.25 >> plot${fname}.batch
echo YAXIS TICK MAJOR 0.1 >> plot${fname}.batch
echo YAXIS TICK MINOR 0.05 >> plot${fname}.batch
echo PRINT TO \"${fname}.png\" >> plot${fname}.batch
echo HARDCOPY DEVICE \"PNG\" >> plot${fname}.batch
echo PRINT >> plot${fname}.batch
((c++));
done
rm -f temp.batch
随后调用 gracebat
以创建 .png
图像序列。
for fullname in `find . -name "*.dat"`; do
fname=$(basename "$fullname")
fname="${fname%.*}"
gracebat -batch plot${fname}.batch -nosafe
done
然后使用 convert
命令为每个数据集制作具有独特颜色的影片,在每个新帧中保留旧情节。
当然,如果你只想改变颜色而不是保留旧图,请在 bash
脚本中将 temp.batch
替换为 plot${fname}.batch
并去掉连接线。
我有一系列数据文件,我只是想在电影文件中显示它们,其中对于每种数据文件颜色,图例都会发生变化。所以我尝试了如下所示:
for i in *dat; do gracebat $i -batch setup.batch -printfile fig-$i.png -hdevice PNG -hardcopy; done
之后,我使用常用的 convert
命令从 PNG 文件制作电影:
convert -delay 50 fig-*.png animation.gif
这会产生如下影片:
setup.batch
文件中的某些内容,但我无法弄清楚我应该在那里写什么?谁能帮我一下?
setup.batch
文件如下所示:
TITLE "Energy barrier"
WORLD XMIN 0
WORLD XMAX 2
WORLD YMIN 0
WORLD YMAX 0.6
XAXIS TICK MAJOR 0.5
XAXIS TICK MINOR 0.25
YAXIS TICK MAJOR 0.1
YAXIS TICK MINOR 0.05
s0 LINE LINEWIDTH 2.0
如果有人想在每一帧中保留情节而不是在一帧中只显示一个情节,那将非常有帮助。例如,现在它在每一步只显示一条线,但是如果我保留以前的图,那么在第 8 帧我可以显示所有 8 个图会怎样?
一种选择是制作与数据文件数量一样多的批处理文件。下面的bash
脚本会自动生成批处理文件。
#!/bin/bash
rm -f temp.batch
c=0;
for fullname in `find . -name "*.dat"`; do
# Extract filename without extension
fname=$(basename "$fullname")
fname="${fname%.*}"
# Keeping the plots in each frame
echo READ BLOCK \"${fname}.dat\" >> temp.batch
echo BLOCK xy \"1:2\" >> temp.batch
echo s$c LINE LINEWIDTH 2.0 >> temp.batch
echo s$c LINE COLOR $((c+1)) >> temp.batch # change the colour
echo >> temp.batch # a blank line for readability
cat temp.batch >> plot${fname}.batch
# Set formatting and other global options
echo WORLD XMIN 0 > plot${fname}.batch # create or overwrite file
echo WORLD XMAX 2 >> plot${fname}.batch
echo WORLD YMIN 0 >> plot${fname}.batch
echo WORLD YMAX 0.6 >> plot${fname}.batch
echo XAXIS TICK MAJOR 0.5 >> plot${fname}.batch
echo XAXIS TICK MINOR 0.25 >> plot${fname}.batch
echo YAXIS TICK MAJOR 0.1 >> plot${fname}.batch
echo YAXIS TICK MINOR 0.05 >> plot${fname}.batch
echo PRINT TO \"${fname}.png\" >> plot${fname}.batch
echo HARDCOPY DEVICE \"PNG\" >> plot${fname}.batch
echo PRINT >> plot${fname}.batch
((c++));
done
rm -f temp.batch
随后调用 gracebat
以创建 .png
图像序列。
for fullname in `find . -name "*.dat"`; do
fname=$(basename "$fullname")
fname="${fname%.*}"
gracebat -batch plot${fname}.batch -nosafe
done
然后使用 convert
命令为每个数据集制作具有独特颜色的影片,在每个新帧中保留旧情节。
当然,如果你只想改变颜色而不是保留旧图,请在 bash
脚本中将 temp.batch
替换为 plot${fname}.batch
并去掉连接线。