我之前没有使用过gnu情节,但在谷歌搜索之后,我似乎无法弄清楚如何格式化我的数据文件。
我有多个数据集,每个数据集都有自己的Yhigh和Ylow值。我希望在同一图表上绘制这3个数据集。
#X Y Yhigh Ylow
8 12181.0375 13198.4 11630.5
16 6096.362708 6500.86 4660.34
32 3086.159688 3282.08 2607.13
64 1668.613958 1963.03 1106.13
128 795.7439583 3929.95 554.027
192 486.0394774 614.181 362.243
我还有2个数据集,我想在同一个图表上绘制。 X值相同。 Y值不同。但是,近似Y范围将是相似的(因此图形看起来不会那么奇怪)。
我读到,对于多个Y值,您可以使用:
#X Y1 Y2 Y3
在你的.dat文件中,然后在绘图时,分开为:
gnuplot> plot "test.dat" using 1:2 with lines,\
"test.dat" using 1:3 with lines
但是,当Y1有Y1_high和Y1_low值,Y2有Y2_high和Y2_low值等时,我不确定怎么做。
答案 0 :(得分:1)
自然' gnuplot数据文件的格式化将使用空格分隔值而不使用大括号:
X Y1 Y2 Y3
现在你需要
set style data lines
plot 'test.data' using 1:2, '' using 1:3
如果您使用逗号作为分隔符,则必须使用
set datafile separator ','
正确绘制它们。最后,使用您的格式将在using
语句后使用显式格式:
plot 'test.dat' using 1:2 '(%lf,%lf,%lf,%lf)'
但这并不像看起来那么灵活,因为唯一允许的格式化程序是%lf
。
答案 1 :(得分:1)
Christoph建议您应该如何重新格式化数据。你可以用awk做到这一点:
awk -F'[(),]' '{$1=$1}1' test.data > new.data
这会获取原始数据并将其分为括号和逗号。 $1=$1
强制awk触摸数据,因此行的格式会发生变化。最后的1
只是简写,告诉awk打印该行。
您的输出将变为:
X Y Yhigh Ylow
8 12181.0375 13198.4 11630.5
16 6096.362708 6500.86 4660.34
32 3086.159688 3282.08 2607.13
64 1668.613958 1963.03 1106.13
128 795.7439583 3929.95 554.027
192 486.0394774 614.181 362.243
您的输入实际上可以使用gnuplot中的相同方法进行更改:
plot "<awk -F'[(),]' '{$1=$1}1' test.data" every ::1
every ::1
用于跳过第一行。稍微短一点就是在1
的awk行末尾交换NR>1
,对于第一行之后的每行,它会计算为1
:
plot "<awk -F'[(),]' '{$1=$1}NR>1' test.data"
答案 2 :(得分:1)
我想也许我的问题很混乱。这不是关于重新格式化数据集,而是我问你如何绘制具有相同x轴值的多组数据。
我最终通过遵循我提出的一个答案解决了我的问题。格式数据:
#X Y1 Y1_high Y1_low Y2 Y2_high Y2_low Y3 Y3_high Y3_low
然后我能够如下绘制线条及其相关的误差线:
plot "mydata.dat" using 1:2 with lines, "mydata.dat" using 1:2:3:4 with error bars,\
"mydata.dat" using 1:5 with lines, "mydata.dat" using 1:5:6:7 with error bars
[等于Y3值]