将 Gnuplot 用于倍数折线图
Using Gnuplot for multiples lines chart
我有一个包含以下数据的 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 终端上。
嗯,你的数据格式有点特殊。您可能知道 gnuplot 不喜欢行中的数据。
幸运的是,gnuplot 也可以灵活地处理这种格式。当然,您始终可以使用其他工具将数据重新格式化为更便于 gnuplot 读取的格式。如果可能的话,我更愿意避免使用额外的外部工具来确保跨平台兼容性。
检查关键字 help for
、help matrix
和 help 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
结果:
我有一个包含以下数据的 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 终端上。
嗯,你的数据格式有点特殊。您可能知道 gnuplot 不喜欢行中的数据。 幸运的是,gnuplot 也可以灵活地处理这种格式。当然,您始终可以使用其他工具将数据重新格式化为更便于 gnuplot 读取的格式。如果可能的话,我更愿意避免使用额外的外部工具来确保跨平台兼容性。
检查关键字 help for
、help matrix
和 help 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
结果: