如何在gnuplot中自动按x值排序

15

当我尝试使用 linespoints 绘制图表时,除非去到x轴的值已经在文件中排序,否则每个点会连接到文件下一行上的点:

enter image description here

只有在对文件进行排序后,我才能得到期望的效果,即每个点都与一个x值较小和一个x值较大的点连接:

enter image description here

是否有一种方法可以在gnuplot内部完成这个功能,而无需在bash中对文件进行排序?


gnuplot可能永远不会实现“真正”的内部排序功能。我猜想这是因为你应该使用现有的工具,例如在Linux下使用sort(对于Windows,你必须安装类似的工具,例如http://gnuwin32.sourceforge.net/packages/coreutils.htm)。有一些笨拙的尝试只使用gnuplot,例如https://stackoverflow.com/q/54144027/7295599。虽然,在gnuplot 5.4中有zsort,但是在两列排序中它并没有维护顺序(仅在Windows下),请参见:https://stackoverflow.com/q/67801386/7295599。 - theozh
1个回答

18

Gnuplot提供了一些平滑滤波器,首先按照它们的x值对数据进行排序。plot ... smooth unique首先按照他们的x值对数据点进行排序,并计算相同x值的平均y值。因此,如果您确定x值是唯一的,则可以使用此选项。否则,您必须使用外部工具或脚本来使用plot '< sort file.dat'进行排序。


4
命令 plot '< sort -nk2 file.dat' u 2:3 会对第二列进行数字排序,这样标题行将保持不变,您可以选择哪一列作为 x 值。 - arekolek

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