【问题标题】:Using Gnuplot for multiples lines chart使用 Gnuplot 制作多重折线图
【发布时间】:2021-04-06 13:01:37
【问题描述】:

我有一个包含以下数据的 txt 文件:

0 0 0.000004 1 0.000003 2 0.000002 3 0.000002 ... 99 0.000002 100 0.000001

1 0 0.000002 1 0.000002 2 0.000001 3 0.000002 ... 99 0.000021 100 0.000020

2 0 0.000003 1 0.000002 2 0.000003 3 0.000003 ... 99 0.000041 100 0.000044

3 0 0.000003 1 0.000002 2 0.000004 3 0.000004 ... 99 0.000071 100 0.000070

我想在 gnuplot 折线图中使用它。每行的第一个数字定义一种颜色(一组),然后在 duo 中,第二个和第三个定义一个数据对(纵坐标上的单个数字,横坐标上的小数点)。因此,第四和第五是二重奏,总是用相同的颜色。 在本例中,因此将有 3 种不同的颜色(因此是线条),每种颜色有 100 个点。 如果需要,我可以去掉每行的第一个数字,并将换行定义为颜色变化(组)。我将一些数据以粗体显示,以便更好地查看二人组。

提前感谢您的帮助。 我将执行的命令将在 Unix 终端上。

【问题讨论】:

  • 您加入 StackOverflow 已经一年多了。因此,您可能应该知道,这里的人们期望自己的研究工作最少,即显示一些代码(不一定有效)。这可能就是为什么有人因为缺乏清晰度而拒绝投票并想结束您的问题。我发现您的目标相当明确,并且有解决方案。看我的回答。

标签: ubuntu unix terminal gnuplot


【解决方案1】:

嗯,你的数据格式有点特殊。您可能知道 gnuplot 不喜欢行中的数据。 幸运的是,gnuplot 也可以灵活地处理这种格式。当然,您始终可以使用其他工具将数据重新格式化为更便于 gnuplot 读取的格式。如果可能的话,我宁愿避免使用额外的外部工具来确保跨平台兼容性。

检查关键字help forhelp matrixhelp every。 在下面的例子中matrix every a::b:i::i 的意思是:它从 b 列开始绘制每 ath 列,但只针对第 i 行(实际上是从第 i 行到第 i 行)。

代码:

### plot special data format
reset session

# create some test data
set print $Data
do for [i=0:3] {
    Line = sprintf("%d",i)
    do for [j=0:100] {
        Line = Line.sprintf(" %d %.3f", j, rand(0)*0.5+i)
    }
    print Line
}
set print

set key out

plot for [i=0:3] $Data u (column(1)/2-1):3 matrix every 2::2:i::i w lp \
     lc i+1 pt i+4 title sprintf("Serie %d",i)
### end of code

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2019-10-27
    • 2021-09-23
    相关资源
    最近更新 更多