将gnuplot填充图表的x范围从-Infinity扩展到+ Infinity

时间:2018-05-20 19:40:59

标签: 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 +----------------------------------------+
   |    +    +    +     +    +    +    +    |
14 |-+                '-' using 1:2       +-|
12 |-+                       ******       +-|
   |                         *    *         |
10 |-+                       *    *       +-|
 8 |-+                  ******            +-|
   |                    *                   |
 6 |-+                  *                 +-|
 4 |-+       ******     *                 +-|
   |              *     *                   |
 2 |-+            *******                 +-|
 0 |-+                                    +-|
   |    +    +    +     +    +    +    +    |
-2 +----------------------------------------+
  2008 2009 2010 2011  2012 2013 2014 2015 2016

数据描述例如容器的水位,这将是不完整的,因为水位之前是0,之后是最终值。 所以我正在寻找一种相应扩展图表的方法。 结果将是:

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

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,虽然这个解决方案非常糟糕。

诀窍是首先将图表渲染到虚拟终端,从而强制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
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

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