我想绘制一个通用数据集
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%左右,但我的数据被压缩了一点。
答案 0 :(得分:1)
您可以使用set arrow
和graph
坐标绘制一条横跨整个图表的垂直线。以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
结果
对于first
和graph
以外的可用坐标系,请参阅例如https://stackoverflow.com/a/23180595/2604213