gnuplot:为相同的 x 值绘制多个 y 值的范围

gnuplot : Plotting range of multiple y values for same x value

我的数据文件有多个 y 值对应一个 x 值。我需要绘制所有 x 值的最大和最小 y 值。 gnuplot 中有这样的命令吗?

例:数据文件

      x    y
      1    10          
      2    6
      1    14
      1    12
      2    25
      2    14

我想要一个图,其中 x 轴上的 1 绘制了 10 和 14,y 轴上的 2 绘制了 6 和 25。

我找到了统计信息,但它找到了整个数据集的最小值和最大值,但没有找到单个 x 值。

有 Candlesticks 选项,但它适用于不同的数据集

Gnuplot 旨在快速绘制预处理数据。
然而,在 Linux 下,您可以利用许多现成的工具来操作您的数据。
如果您的数据集不是很大,您可以选择使用 gnuplot 中的 inline 中的一些。

sort 可以是其中之一(以及 awk),在这里您阅读了 4 倍的文件。

plot  "<sort data.dat -k2 -n   | sort -n -k1 -u" t "Min" \
     ,"<sort data.dat -k2 -n -r| sort -n -k1 -u" t "Max"

有了 awk,您可以做得更好,只扫描一次您的文件

set xlabel "My x axis [a.u.]"
set ylabel "My y axis [a.u.]"
set style fill transparent solid 0.4

plot "< awk '{ Q[]++;                   \
  if (Q[]==1){ Min[]=;Max[]=; } \
  else                                    \
  {  if (Min[]>) {Min[]=;}        \
     else {if (Max[]<) Max[]=;} } \
  }                                       \
  END {for (i in Min) print i,Min[i],Max[i]}' data.dat " \
  using ():():() w filledcurve  title "Min and Max" lc rgb "#00A000"

备注:

  • 为了简单起见,我清除了文件的第一行
  • plot "< command " 它执行命令并将其用作输入数据
  • man sortman awk 获得 sortawk 程序的全面帮助
  • 检查 associative arrays in awk 以更深入地了解 awk