如何在 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 并去掉连接线。