具有多个数据集和高/低误差条的gnuplot数据文件

时间:2014-08-13 02:58:01

标签: gnuplot

我之前没有使用过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值等时,我不确定怎么做。

3 个答案:

答案 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值]