如何解决将 Gnuplot 用于多重折线图
我有一个包含以下数据的 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 折线图中使用它。每行的第一个数字定义一个颜色(一个组),然后在二重奏中,第二个和第三个定义一个数据对(纵坐标上的一位数字,横坐标上的小数点)。因此,第四个和第五个是二重奏,总是用相同的颜色。 在本示例中,因此将有 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
结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。