1

我有一系列数据文件,我只是想在电影文件中显示它们,对于每个数据文件的颜色,图例都会改变。所以我尝试了以下方法:

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 个图,该怎么办?

4

1 回答 1

2

一种选择是制作与数据文件数量一样多的批处理文件。以下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命令为每个数据集制作具有唯一颜色的电影,在每个新帧中保留旧图。

当然,如果您只想更改颜色而不保留旧图,请在脚本中temp.batch替换为并去掉连接线。plot${fname}.batchbash

于 2016-09-19T18:51:03.420 回答