【问题标题】:gnuplot : Plotting range of multiple y values for same x valuegnuplot:绘制相同x值的多个y值的范围
【发布时间】:2015-09-07 09:32:31
【问题描述】:

我的数据文件对于一个 x 值有多个 y 值。我需要绘制所有 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。

我找到了 stats,但它找到了整个数据集的最小值和最大值,而不是单个 x 值。

有烛台选项,但这是针对不同的数据集

【问题讨论】:

  • 到目前为止你有什么收获?
  • Gnuplot 无法做到这一点。使用外部工具或脚本来预处理您的数据。
  • 你的意思是你想用相同 x 的所有连续行替换为具有最大 y 值的单行?您可能会使用串行评估运算符做一个丑陋的黑客攻击,但我不推荐它。

标签: range max gnuplot min


【解决方案1】:

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

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[$1]++;                   \
  if (Q[$1]==1){ Min[$1]=$2;Max[$1]=$2; } \
  else                                    \
  {  if (Min[$1]>$2) {Min[$1]=$2;}        \
     else {if (Max[$1]<$2) Max[$1]=$2;} } \
  }                                       \
  END {for (i in Min) print i,Min[i],Max[i]}' data.dat " \
  using ($1):($2):($3) w filledcurve  title "Min and Max" lc rgb "#00A000"

注意事项:

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

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多