如何在gnuplot中绘制平均值作为横坐标的图表

3

我的数据文件格式如下:

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是否可以实现此功能?


我的猜测是,一般情况下这将非常棘手,但如果对数据进行一些限制,就可以做到。例如,如果第一列中的每个值总是连续出现四次。你有这样的有用限制吗?对于任意数据,我建议使用单独的预处理工具。 - andyras
在这个特定的问题中:是的。第一列中的每个值都以4次序列出现。我正在使用Excel作为单独的实用程序,但我对这个解决方案不满意。 - Mirek
2个回答

2

要计算所有具有相同第一个值的数值的算术平均值,您可以使用 smooth unique。要获取相同横坐标的第二列和第三列的所有值的平均值,您可以使用

set datafile separator ';'
plot 'datafile' using 1:(($2+$3)/2.0) smooth unique

这将使得数据在x值上保持单调性,并用平均y值替换所有具有相同横坐标的点。

例如,如果您只想要第二列的平均值,您应该使用以下命令:

plot 'datafile' using 1:2 smooth unique

你误解了我的问题(或者更可能的是我没有解释清楚)。我不想要2.123和4.123的平均值,而是2.123、2.113、2.544和2.324的平均值=2.276,并用100绘制;以及4.123、5.213、6.234和4.234的平均值=4.951,并将其与100一起绘制(作为图中的不同系列)。编辑:使用第二种解决方案无法给我正确的图形 - 我认为第二列的值被加总并与100一起绘制。 - Mirek
如果您想让第二列和第三列属于不同的系列,您可以使用 plot 'datafile' using 1:2 smooth unique, '' using 1:3 smooth unique。或者您想在这两个系列之间绘制一些连接吗? - Christoph
哦,我认为那个可以正常工作;)谢谢!只有两个快速问题:1. 是否有办法在每个值上添加偏差?2. 我正在使用1:2:xtic(1)来显示数据文件中的值,但如何使它们均匀分布? - Mirek
使用例如 with 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

0

是的! 首先将每个分号替换为空格,然后尝试此命令

plot "your_data_file" using ($1):(($2+$3)/2) 

3
可以使用命令 set datafile separator ";",而无需更改文件格式。 - andyras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接