Как передать Ruby-Gnuplot/Multiplot в файл?
Пример
require 'gnuplot'
require 'gnuplot/multiplot'
def sample
x = (0..50).collect { |v| v.to_f }
mult2 = x.map {|v| v * 2 }
squares = x.map {|v| v * 4 }
Gnuplot.open do |gp|
Gnuplot::Multiplot.new(gp, layout: [2,1]) do |mp|
Gnuplot::Plot.new(mp) { |plot| plot.data << Gnuplot::DataSet.new( [x, mult2] ) }
Gnuplot::Plot.new(mp) { |plot| plot.data << Gnuplot::DataSet.new( [x, squares] ) }
end
end
end
работает довольно хорошо Но как я могу отправить это в файл вместо экрана? Где поставить plot.terminal "png enhanced truecolor"
а также plot.output "data.png"
?
0 ответов
Действительно, я даже не знаю, куда мне позвонить
#terminal
и
#output
методы, поскольку объект графика находится внутри многосюжетного блока.
В качестве обходного пути следующее будет работать должным образом.
Gnuplot.open do |gp|
...
end
Параметр блока
gp
в этой части передается объект ввода-вывода для отправки команды gnuplot по каналу. Таким образом, мы можем отправлять команды ("установить терминал", "установить вывод") напрямую в gnuplot через
gp
.
Gnuplot.open do |gp|
gp << 'set terminal png enhanced truecolor' << "\n"
gp << 'set output "data.png"' << "\n"
Gnuplot::Multiplot.new(gp, layout: [2,1]) do |mp|
Gnuplot::Plot.new(mp) { |plot| plot.data << Gnuplot::DataSet.new( [x, mult2] ) }
Gnuplot::Plot.new(mp) { | plot| plot.data << Gnuplot::DataSet.new( [x, squares] ) }
end
end