【问题标题】:Plotting multiple data series with multiple styles in a gnuplot for loop在 gnuplot for 循环中绘制具有多种样式的多个数据系列
【发布时间】:2013-07-23 00:47:33
【问题描述】:

我正在尝试使用 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 而不是解决它。

感谢您的帮助!

【问题讨论】:

    标签: for-loop gnuplot


    【解决方案1】:

    迭代的范围在下一个逗号或命令结尾处结束,以先到者为准。比较例如以下两个示例(来自 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 ''
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 2016-12-05
      • 2023-02-08
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多