【问题标题】:Time Axis Formatting in Ruby/Gnuplot/ GnuplotRBRuby/Gnuplot/ GnuplotRB 中的时间轴格式
【发布时间】:2018-08-08 00:03:39
【问题描述】:

在过去的几个小时里拉着我的头发。使用 GnuplotRB。尝试绘制一些时间序列,以及我尝试使用的任何格式和 xrange 选项,X 轴始终显示 1990 到 2035(这是从哪里来的??)

下面有类似数据的例子

require 'gnuplotrb'
include GnuplotRB

x = ["2013-05-22 02:49:49",    "2013-05-22 02:56:49", "2013-05-22 02:56:59"]
y = [ 2,5,9]

p x.first
p x.last

element = Dataset.new(
  [x, y], 
  with:'lines lw 3 lt rgb "black"', 
  timefmt: "%Y-%m-%d %H:%M:%S",
  xdata: 'time',
  format_x:  "%Y-%m-%d %H:%M:%S",
#  xrange: '[ "#{x.first}":"#{x.last}" ]'
  xrange: '[ "2013-05-22 02:49:00" : "2013-05-22 02:50:00" ]'
  )

myBRTraces = Plot.new(
  element
   )

p myBRTraces.inspect
myBRTraces.to_png("/media/sf_D_DRIVE/Test/a.svg", size: [1200, 1800], truecolor:true)

[编辑] - 进一步简化代码。

我还完成了this tweak 以实际从 gnuplot 获得一些错误日志记录。我确实帮助确定了 xrange 是一个 b***,但我仍然不知道如何使它工作:

$  ruby test.rb 
"2013-05-22 02:49:49"
"2013-05-22 02:56:59"
 "#<GnuplotRB::Plot:0x00000001ba21f0 @options=Hamster::Hash[], @datasets=Hamster::Vector[#<GnuplotRB::Dataset:0x00000001ba2100 @type=:datablock, @data=#<GnuplotRB::Datablock:0x00000001ba1f70 @stored_in_file=false, @data=\"2013-05-22 02:49:49 2\\n2013-05-22 02:56:49 5\\n2013-05-22 02:56:59 9\">, @options=Hamster::Hash[:with => \"lines lw 3 lt rgb \\\"black\\\"\", :timefmt => \"%Y-%m-%d %H:%M:%S\", :xdata => \"time\", :format_x => \"%Y-%m-%d %H:%M:%S\", :xrange => \"[ \\\"2013-05-22 02:49:00\\\" : \\\"2013-05-22 02:50:00\\\" ]\"]>], @cmd=\"plot \">"    
/var/lib/gems/2.3.0/gems/gnuplotrb-0.4.0/lib/gnuplotrb/mixins/error_handling.rb:28:in `check_errors': Error in previous command ("Warning: empty x range [2013:2013], adjusting to [1992.87:2033.13]"): "Warning: empty y range [2:2], adjusting to [1.98:2.02]; gnuplot> plot $DATA1 with lines lw 3 lt rgb "black" timefmt "%Y-%m-%d %H:%M:%S" xdata time format x "%Y-%m-%d %H:%M:%S" xrange [ "2013-05-22 02:49:00" : "2013-05-22 02:50:00" ]; line 4: unexpected or unrecognized token" (GnuplotRB::GnuplotError)
from /var/lib/gems/2.3.0/gems/gnuplotrb-0.4.0/lib/gnuplotrb/staff/terminal.rb:183:in `close'
from /var/lib/gems/2.3.0/gems/gnuplotrb-0.4.0/lib/gnuplotrb/plot.rb:85:in `plot'
from /var/lib/gems/2.3.0/gems/gnuplotrb-0.4.0/lib/gnuplotrb/mixins/plottable.rb:111:in `to_specific_term'
from /var/lib/gems/2.3.0/gems/gnuplotrb-0.4.0/lib/gnuplotrb/mixins/plottable.rb:53:in `method_missing'

我没有收到“警告:空 x 范围 [2013:2013]”

【问题讨论】:

  • 无法尝试代码,但您在xange 中有错字(必须是xrange),并且xrange 必须以与timefmt 相同的格式给出/跨度>
  • 非常感谢。错字是复制粘贴错误:/
  • 我已经编辑了上面的示例以使其更加简单。
  • i.imgur.com/GKmmXAo.png ?更简单但仍然失败?

标签: ruby datetime time gnuplot


【解决方案1】:

documentation 看来,似乎需要将特定于情节的设置传递给Plot.new 调用:

在 gnuplot doc (pp. 105-181) 中解释了 Plot 的选项。阴谋 选项以与 Dataset 相同的方式转换为 gnuplot 格式 (除了在每个选项之前添加“设置”)。

因此:

element = Dataset.new(
  [x, y],
  with: 'lines lw 3 lt rgb "black"',
  using: '1:2'
)

myBRTraces = Plot.new(
  element,
  timefmt: "%Y-%m-%d %H:%M:%S",
  xdata: 'time',
  format_x:  "%Y-%m-%d %H:%M:%S",
  xrange: '[ "2013-05-22 02:49:00" : "2013-05-22 02:50:00" ]',
  yrange: '[0:10]'
)

否则,gnuplotrb 会尝试在单个 plot 命令中组合传递给 Dataset.new 的所有选项(如您发布的错误消息中所示),然后失败:

plot $DATA1 with lines lw 3 lt rgb "black" timefmt "%Y-%m-%d %H:%M:%S" xdata time format x "%Y-%m-%d %H:%M:%S" xrange [ "2013-05-22 02:49:00" : "2013-05-22 02:50:00" ];

【讨论】:

  • 非常感谢@ewcz :) 现在只需要了解为什么只针对 x 的所有元素绘制 y 的第一个元素 ... (i.imgur.com/gKGvPvg.png)
  • 实际上,它不是绘制 y 的第一个元素,而是使用命令中的文字值 2:'1:2'
  • 知道了:/我必须重新格式化我的时间数据 timefmt:"%Y-%m-%dT%H:%M:%S",否则,gnuplot 假设只有一列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
相关资源
最近更新 更多