Как передать 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
Другие вопросы по тегам