ruby - 使用 ruby​​_gnuplot 在 Ruby 中制作动画 3d 散点图

标签 ruby gnuplot data-visualization

是否可以使用 gnuplot gem 在 Ruby 中创建动画 3 维散点图?

我已经查看了 gem 源代码、一堆示例和 gnuplot 手册,但还没有弄清楚该怎么做。

我想我必须将它 fork 并添加一些 do-loop 功能 - 但在我这样做之前,我想知道是否有好的方法。

这是我的代码的摘录,显示了我目前所拥有的内容。

Gnuplot.open do |gp|
  Gnuplot::SPlot.new( gp ) do |plot|
    plot.title 'Orbital Simulation'

    N.times do | i |
      objects.each { | key, object | object.calc_tick(objects.except key) }
      objects.each { | key, object | object.apply_tick }

      x = []
      y = []
      z = []

      objects.each do | key, object |
        x << object.get_x
        y << object.get_y
        z << object.get_z
      end

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

最佳答案

方法调用 Gnuplot::Splot.new(gp) {...} 将给定 block 中定义的命令(包括 splot 命令和内联数据)发送到 IO 对象 GP。因此,在循环中依次调用Gnuplot::Splot.new,并在它们之后插入一些等待行为(休眠)。

例如,以下代码生成动画 3d 散点图(实际上只包含一个点)。

require "gnuplot"

Gnuplot.open do |gp|

  1000.times do |k| ### loop
    Gnuplot::SPlot.new( gp ) do |plot|
      plot.title 'Orbital Simulation'
      plot.xrange "[-2:2]"
      plot.yrange "[-2:2]"
      plot.zrange "[-2:2]"
      x = [Math.sin(k*0.05)]
      y = [Math.cos(k*0.05)]
      z = [Math.sin(k*0.07)]
      plot.data << Gnuplot::DataSet.new( [x, y, z] ) do |ds|
        ds.with = "points ps 2 pt 7"
        ds.notitle
      end
    end
    gp << "\n" ### this is needed to separate line after inline data
    gp.flush   ### flushing popen buffer
    sleep 0.1  ### waiting 
  end
end

关于ruby - 使用 ruby​​_gnuplot 在 Ruby 中制作动画 3d 散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17508051/

相关文章:

ruby-on-rails - Rails 格式化日期并减去

ruby-on-rails - 如何解决 'already initialised constant' cmd 上的 BigDecimal 'mailcatcher' 警告?

linux - 配置 gnuplot 以处理像 excel 这样的时间序列

gnuplot - 如何在 C++ 中使用 gnuplot?

ruby-on-rails - Rails4 - 如何在不裁剪的情况下压缩 Rails 应用程序中用户附加的图像?

ruby - 如何拆分数组?

plot - Gnuplot 3D - 绘制散点和它们之间的表面*和*线

r - 如何整齐地对齐堆叠条形图标签,使条形的每一侧对齐方式不同?

python-3.x - scatter_kws 和 line_kws 在 seaborn lmplot 中做什么

python - 在 VisPy 中显示旋转立方体表面的图像