扩展gnuplot fillsteps图表';s x范围从-无穷大到+;无穷

扩展gnuplot fillsteps图表';s x范围从-无穷大到+;无穷,gnuplot,Gnuplot,我有以下代码来生成图表: set terminal dumb size 60, 20 set xrange [2008:2016] set yrange [-2:16] plot '-' using 1:2 smooth cumulative with fillsteps 2010 4 2011 -2 2012 6 2013 4 2014 -3 这将生成此图表: 16 +----------------------------------------+ | + + +

我有以下代码来生成图表:

set terminal dumb size 60, 20
set xrange [2008:2016]
set yrange [-2:16]
plot '-' using 1:2 smooth cumulative with fillsteps

2010 4
2011 -2
2012 6
2013 4
2014 -3
这将生成此图表:

16 +----------------------------------------+
   |    +    +    +     +    +    +    +    |
14 |-+                '-' using 1:2       +-|
12 |-+                       ******       +-|
   |                         *    *         |
10 |-+                       *    *       +-|
 8 |-+                  ******            +-|
   |                    *                   |
 6 |-+                  *                 +-|
 4 |-+       ******     *                 +-|
   |              *     *                   |
 2 |-+            *******                 +-|
 0 |-+                                    +-|
   |    +    +    +     +    +    +    +    |
-2 +----------------------------------------+
  2008 2009 2010 2011  2012 2013 2014 2015 2016
如果数据描述了容器的水位,这将是不完整的,因为之前的水位为0,之后的最终值为0。 因此,我正在寻找一种方法来相应地扩展图表。 结果将是:

16 +----------------------------------------+
   |    +    +    +     +    +    +    +    |
14 |-+                '-' using 1:2       +-|
12 |-+                       ******       +-|
   |                         *    *         |
10 |-+                       *    **********|
 8 |-+                  ******            +-|
   |                    *                   |
 6 |-+                  *                 +-|
 4 |-+       ******     *                 +-|
   |         *    *     *                   |
 2 |-+       *    *******                 +-|
 0 |**********                            +-|
   |    +    +    +     +    +    +    +    |
-2 +----------------------------------------+
  2008 2009 2010 2011  2012 2013 2014 2015 2016

我找到了一个解决办法,尽管这是一个相当棘手的办法

诀窍是首先将图表呈现给虚拟终端,从而强制gnuplot计算“gnuplot定义的变量”。 然后,可以使用它们将丢失的数据追加到数据块中。 即使自动计算范围值,此操作也有效

$data << EOD
2010 4
2011 -2
2012 6
2013 4
2014 -3
EOD

set xrange [2008:2016]
set yrange [-2:16]

set terminal unknown
plot $data

set print $data append
print sprintf("%d 0", GPVAL_X_MIN)
print sprintf("%d 0", GPVAL_X_MAX)
set print

set terminal dumb size 60, 20
plot $data using 1:2 smooth cumulative with fillsteps

但是,正如您所看到的,此解决方案的一个问题是它会生成警告。要隐藏警告,请这样调用它:
cat example.gnuplot | gnuplot 2>/dev/null

如果您在
set xrange
命令中手动设置x边界,为什么需要第一个plot命令来让gnuplot确定x边界?@user8153这仅用于示例。在真实版本中,我没有设置xrange。
$ cat example.gnuplot | gnuplot
WARNING: Plotting with an 'unknown' terminal.
No output will be generated. Please select a terminal with 'set terminal'.


  16 +--------------------------------------------------+
     |     +      +     +      +     +     +      +     |
  14 |-+                        $data using 1:2       +-|
     |                                                  |
  12 |-+                             *******          +-|
  10 |-+                             *     *          +-|
     |                               *     *************|
   8 |-+                       *******                +-|
     |                         *                        |
   6 |-+                       *                      +-|
     |                         *                        |
   4 |-+          *******      *                      +-|
   2 |-+          *     ********                      +-|
     |            *                                     |
   0 |*************                                   +-|
     |     +      +     +      +     +     +      +     |
  -2 +--------------------------------------------------+
    2008  2009   2010  2011   2012  2013  2014   2015  2016