我的数据文件格式如下:
100;2.123;4.123
100;2.113;5.213
100;2.544;6.234
100;2.324;4.234
200;2.543;3.123
200;2.543;5.123
...
第一列是函数的参数,第二列和第三列是函数的结果。对于相同的第一列数值,第二列和第三列的值不同,这是由于其他因素造成的。我想绘制一个图表来计算所有具有相同第一列的第二列和第三列值的算术平均值。
gnuplot是否可以实现此功能?
我的数据文件格式如下:
100;2.123;4.123
100;2.113;5.213
100;2.544;6.234
100;2.324;4.234
200;2.543;3.123
200;2.543;5.123
...
第一列是函数的参数,第二列和第三列是函数的结果。对于相同的第一列数值,第二列和第三列的值不同,这是由于其他因素造成的。我想绘制一个图表来计算所有具有相同第一列的第二列和第三列值的算术平均值。
gnuplot是否可以实现此功能?
要计算所有具有相同第一个值的数值的算术平均值,您可以使用 smooth unique
。要获取相同横坐标的第二列和第三列的所有值的平均值,您可以使用
set datafile separator ';'
plot 'datafile' using 1:(($2+$3)/2.0) smooth unique
这将使得数据在x
值上保持单调性,并用平均y
值替换所有具有相同横坐标的点。
例如,如果您只想要第二列的平均值,您应该使用以下命令:
plot 'datafile' using 1:2 smooth unique
plot 'datafile' using 1:2 smooth unique, '' using 1:3 smooth unique
。或者您想在这两个系列之间绘制一些连接吗? - Christophwith errorbars
来添加偏差。这些值也受平滑处理的影响。关于 x
轴:在您的情况下,由于始终有四个相同的 x
值,因此您可以使用 plot 'datafile' using (int(floor($0/4.0))):2:xtic(1) smooth unique
,或者带有误差线的 plot 'datafile' using (int(floor($0/4.0))):2:(1):xtic(1) smooth unique with errorbars
。但这几乎是一个新问题。 - Christoph是的! 首先将每个分号替换为空格,然后尝试此命令
plot "your_data_file" using ($1):(($2+$3)/2)
set datafile separator ";"
,而无需更改文件格式。 - andyras