gnuplot:在单个图中绘制来自多个输入文件的数据


82

我正在尝试使用gnuplot绘制图形。我有六个文本文件。每个文本文件包含两列。第一列表示以秒为单位的时间(浮点数)。第二个是序列号。我想在所有六个文件的单个图形中绘制时间与序列号的图形。我正在使用此文件来做到这一点。

set terminal png
set output 'akamai.png'

set xdata time
set timefmt "%S"
set xlabel "time"

set autoscale

set ylabel "highest seq number"
set format y "%s"

set title "seq number over time"
set key reverse Left outside
set grid

set style data linespoints

plot "print_1012720" using 1:2 title "Flow 1", \
plot "print_1058167" using 1:2 title "Flow 2", \
plot "print_193548"  using 1:2 title "Flow 3", \ 
plot "print_401125"  using 1:2 title "Flow 4", \
plot "print_401275"  using 1:2 title "Flow 5", \
plot "print_401276"  using 1:2 title "Flow 6"

我的文件在哪里:

  • print_1012720
  • print_1058167
  • print_193548
  • print_401125
  • print_401275
  • print_401276

它给出了一个奇怪的错误,如下所示:

“ plot.plt”,第24行:未定义的变量:plot

难道我做错了什么?是否可以在同一图中绘制来自不同文件的输入数据?


Answers:


132

你好亲密!

更改

plot "print_1012720" using 1:2 title "Flow 1", \
plot "print_1058167" using 1:2 title "Flow 2", \
plot "print_193548"  using 1:2 title "Flow 3", \ 
plot "print_401125"  using 1:2 title "Flow 4", \
plot "print_401275"  using 1:2 title "Flow 5", \
plot "print_401276"  using 1:2 title "Flow 6"

plot "print_1012720" using 1:2 title "Flow 1", \
     "print_1058167" using 1:2 title "Flow 2", \
     "print_193548"  using 1:2 title "Flow 3", \ 
     "print_401125"  using 1:2 title "Flow 4", \
     "print_401275"  using 1:2 title "Flow 5", \
     "print_401276"  using 1:2 title "Flow 6"

由于gnuplot试图将单词“ plot”解释为要打印的文件名而出现错误,但是您尚未将任何字符串分配给名为“ plot”的变量(这很好-太令人困惑了)。


72

如果适当地调整文件名或图形标题,您可能会发现gnuplot的for循环在这种情况下很有用。

例如

filenames = "first second third fourth fifth"
plot for [file in filenames] file."dat" using 1:2 with lines

filename(n) = sprintf("file_%d", n)
plot for [i=1:10] filename(i) using 1:2 with lines

5
我知道这很旧,但是感谢您添加该替代解决方案。没有意识到gnuplot中的循环,它们是一个了不起的功能。
阿米特(Amit)2014年

假设正常的文件名约定(name.dat),我认为这应该是file。“。dat”。首先 。将文件名连接为“ dat”,但未包含在绘图命令中实际使用的文件名中。
2014年

如何在目录中绘制所有文件而无需显式写入文件名?(stackoverflow.com/q/29969393/855050
becko

我为这个问题添加了答案,@ becko。
理查德

21

replot是一次获取多个图的另一种方法:

plot file1.data
replot file2.data

1
最好的答案,第一个没有用。输出为:“格式必须具有类型为double(%lf)的1-7转换”。而其他选项仅允许您在所有数据列都相同的情况下执行此操作。
RSM
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.