如何在ruby-gnuplot中冻结轴范围,并在冻结图上方过度绘图?

时间:2014-04-28 06:11:07

标签: ruby gnuplot

我想绘制一个通用数据集

plot.data << ::Gnuplot::DataSet.new([x, y]) do |ds|
  ds.with = "lines linewidth 2"
  ds.notitle
end

然后冻结绘图的自动y范围,以便在该y范围的底部到顶部的某个位置'x1'处绘制垂直线。我设置了一些变量并调用plot:

a = [x1, x1]
b = [0, y.sort.last * 1.1]

plot.data << ::Gnuplot::DataSet.new([a, b]) do |ds|
  ds.with = "lines linewidth 2 lt 0 lc 3"
  ds.notitle
end

其中选择b的值以填充y轴范围。但是,当然,gnuplot扩展轴范围以适应我们的数组b的大值。因此,不是从上到下绘制一条线,我仍然有一条线延伸到图上方的90%左右,但我的数据被压缩了一点。

1 个答案:

答案 0 :(得分:1)

您可以使用set arrowgraph坐标绘制一条横跨整个图表的垂直线。以sin_wave.rb为例,这是一个例子:

$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
require "gnuplot"
Gnuplot.open do |gp|
  Gnuplot::Plot.new( gp ) do |plot|

    plot.xrange "[-10:10]"
    plot.title  "Sin Wave Example"
    plot.ylabel "sin(x)"
    plot.xlabel "x"

    x1 = 2
    plot.arrow "from first %f,graph 0 rto first 0,graph 1 nohead lw 2 lt 0 lc 3" % x1

    plot.data << Gnuplot::DataSet.new( "sin(x)" ) do |ds|
      ds.with = "lines"
      ds.linewidth = 4
    end

  end
  sleep 10
end

结果

enter image description here

对于firstgraph以外的可用坐标系,请参阅例如https://stackoverflow.com/a/23180595/2604213