1

我正在尝试使用 gnuplot 生成一些带有线条和误差线的图,但我遇到了一些麻烦。当我运行此代码时(没有事先定义 i,但事先定义了 m = 9):

plot for [i=2:5] \
'../Data/Clustering/c_vs_n_with_error_'.i.'ball_m'.m.'.txt' u 1:2 w linespoints t ''.i.'-Ball', \
'../Data/Clustering/c_vs_n_with_error_'.i.'ball_m'.m.'.txt' u 1:2:3 w yerrorbars t ''

我收到以下错误:

warning: Skipping unreadable file "../Data/Clustering/c_vs_n_with_error_6ball_m9.txt"

事实上,没有那个名字的文件。我的问题是生成的图没有误差线(它以纯线样式绘制);就好像第二次使用同一个文件被忽略了。但是,当我将迭代范围更改为 [i=2:4] 时,我没有收到任何错误 - 并且 i=5 的数据范围是用误差线而不是线绘制的。

我以这种方式绘图是因为我探索的其他信息告诉我,不可能同时使用多种样式(线点和 yerrorbars)进行绘图,这是一个很好的解决方案(但它仅提供了单个数据系列的示例,没有for 循环)。

我想避免做的两件事是 a) 写出所有文件(不使用迭代)和 b) 使用 shell 脚本,因为我更喜欢理解 gnuplot 而不是解决它。

感谢您的帮助!

4

1 回答 1

2

迭代的范围在下一个逗号或命令结尾处结束,以先到者为准。比较例如以下两个示例(来自 gnuplot 手册):

plot for [i=1:3] j=i, sin(j*x)

plot for [i=1:3] j=i sin(j*x)

因此,您可以将绘图命令更改为:

file(n) = sprintf('../Data/Clustering/c_vs_n_with_error_%dball_m'.m.'.txt', n)
plot for [i=2:5] file(i) u 1:2 w linespoints t ''.i.'-Ball', \
     for [i=2:5] file(i) u 1:2:3 w yerrorbars t ''
于 2013-07-22T16:47:33.070 回答