【问题标题】:Stacking graphs in gnuplot在 gnuplot 中堆叠图形
【发布时间】:2021-04-15 03:39:12
【问题描述】:

我目前正在从多个文件中绘制图表。数据基本上是时间序列,第一列中有时间戳,其他列中有多个测量值。时间戳在所有文件中并不完全匹配。不过,我想绘制堆叠在其他图表之上/之上的图表。有 gnuplot 手段来促进这一点 - 例如必要时也做插值?

文件 1:

0.1 42 1 100
0.2 43 0 102
0.3 45 -2 105

文件2:

0.15 38 -3 88
0.25 37 -2 88.5

plot 'file1' using 1:2 w l, 'file2' using 1:2 w l STACK_ME_PLEASE

所以在这个例子中,我想在 file2 中大致显示 (0.15, 42.5+38)(0.25, 44+37) 的点 - 它们堆叠在 file1 的图表顶部.

【问题讨论】:

  • gnuplot 可以做很多事情。但是你在这里要求很多。我建议您对 file2 进行一些预处理以创建一个 file3 以使用 file1 进行绘图。在 C、C++、Java、Fortran、R 中执行此操作,如果不是很大,请在 excel 中执行此操作。

标签: gnuplot


【解决方案1】:

如果这仍然相关,以下代码将涵盖您的示例,但是,由于您不提供有关一般数据的信息,因此以下建议可能不适用于更一般的情况。 仅当第二个文件的数据恰好位于第一个文件的两个数据点的中间时,数据才会“堆叠”。也许通过一些额外的努力,它可以以这样一种方式进行调整,即如果它只是在第一个文件的两个数据点之间的某个地方,它仍然“堆叠”数据。

代码:

### "stacking" data
reset session

$Data1 <<EOD
0.1   42   1   100
0.2   43   0   102
0.3   45  -2   105
EOD

$Data2 <<EOD
0.15   38   -3   88
0.25   37   -2   88.5
EOD

set table $Data3
    plot x1=y1=NaN $Data1 u (x0=x1,x1=$1,(x0+x1)/2.):(y0=y1,y1=$2,(y0+y1)/2.) w table
    plot $Data2 u 1:2 w table
unset table

set table $Data4
    plot $Data3 u 1:2 smooth freq
unset table

set yrange [0:]
set key top left

plot $Data1 u 1:2 w lp pt 7 lc "red", \
     $Data2 u 1:2 w lp pt 7 lc "web-green", \
     $Data4 u 1:2 w lp pt 7 lc "cyan"
### end of code

结果:

【讨论】:

  • @user1225999 正如您已经提到的那样,在一般情况下,您需要对数据进行插值或重新采样。不幸的是,它没有内在的 gnuplot 功能。所以,你必须使用外部工具,或者你可以尝试这个繁琐的 gnuplot 解决方法:stackoverflow.com/q/54362441/7295599
猜你喜欢
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多