Правильный способ использования gnuplot в Ruby - PullRequest
1 голос
/ 14 января 2020

Так что я пытаюсь использовать Gnuplot в Ruby (не на рельсах). Мне удалось построить свои данные (радиус трубы на разных расстояниях), выполнив это:

Gnuplot.open do |gp|
   Gnuplot::Plot.new(gp) do |plot|
       plot.xrange "[0:20]"
       plot.yrange "[0:7]"
       plot.title  "Radius of reed pipe per abscissa"
       plot.xlabel "x"
       plot.ylabel "radius"

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

Пока все хорошо. Проблема в том, что сейчас я пытаюсь нарисовать форму этого объекта, поэтому я хотел бы нарисовать круг в 3d вокруг оси x радиуса rad [i] в ​​положении abs [i], для каждого i в abs.

Здесь я начал чувствовать себя потерянным, потому что все учебники и примеры, которые я мог найти, использовали Gnuplot в качестве сценария, и я просто не понимаю, как вы должны заставить его работать в Ruby (пример: http://www.gnuplotting.org/code/sand_density2.gnu).

Например, чтобы нарисовать круг, я часто вижу это (из приведенного выше примера):

   set object 1 circle front at 0,0 size r fillcolor rgb "black" lw 4

, но я понятия не имею, как заставить это работать в Ruby, документация очень плохая (https://www.rubydoc.info/gems/gnuplot/2.6.2/Gnuplot/Plot), несколько примеров, приведенных в Ruby в github (https://github.com/rdp/ruby_gnuplot), не объясняют, как делать более сложные вещи и я в целом нахожу очень мало информации об этой топи c.

Реальный вопрос здесь в том, как правильно использовать все функции Gnuplot, такие как эта, в Ruby?

1 Ответ

1 голос
/ 30 января 2020

Попробуйте numo-gnuplot

https://github.com/ruby-numo/numo-gnuplot

Здесь вы видите много примеров.

https://github.com/ruby-numo/numo-gnuplot-demo

Например:

# frozen_string_literal: true

require 'numo/gnuplot'


x = [1,2,3,4,5]
y = [2,3,2,3,2]
r = 5

Numo.gnuplot do
       set xrange: 0..20
       set yrange: 0..7
       set xlabel: "x"
       set ylabel: "y"

       # Lazy way
       set "object 1 circle front at 10,3 size #{r} fillcolor rgb \"black\" lw 4"

       plot x, y, with: :lines
end
gets # wait

numo-gnuplot охватывает большинство официальных примеров gnuplot. Итак, взглянув на примеры, вы можете легко заменить код gnuplot на Ruby one.

...