2015-10-30 26 views
0

我有一个csv文件“harvest.csv”,其中一列包含日期。 这是我来到(plot.rb):GNUPlot xrange在ruby中使用日期

require 'csv' 
require 'gnuplot' 

days = Array.new 
mg = Array.new 

csv = CSV.open("../data/harvest.csv", headers: :first_row, converters: :numeric) 
csv.each do |row| 
    days << row[1] 
    mg << row[3] 
end 


dates = [] 
days.each {|n| dates << Date.strptime(n,"%Y-%m-%d")} 

Gnuplot.open do |gp| 
    Gnuplot::Plot.new(gp) do |plot| 
    plot.timefmt "'%Y%m%d'" 
    plot.title "Best Harvest Day" 
    plot.xlabel "Time" 
    **plot.xrange "[('2013-04-01'):('2013-06-01')]"** 
    plot.ylabel "Harvested" 


    plot.data << Gnuplot::DataSet.new([dates,mg]) do |ds| 
     ds.with = "linespoints" 
     ds.title = "Pollen harvested" 
    end 
    end 
end 

当我运行plot.rb引发错误:

line 735: Can't plot with an empty x range! 

我应该转换[日期]别的东西?

回答

0

您使用plot.timefmt设置的格式必须与您在范围内使用的格式相匹配。现在缺少-。另外,您需要将xdata设置为timeset datatype on the x axis to time

Gnuplot::Plot.new(gp) do |plot| 
    plot.timefmt "'%Y-%m-%d'" 
    plot.title "Best Harvest Day" 
    plot.xlabel "Time" 
    plot.xdata "time" 
    plot.xrange '["2013-04-01":"2013-06-01"]' 
    plot.ylabel "Harvested" 

    plot.data << Gnuplot::DataSet.new([dates, mg]) do |ds| 
    ds.with = "linespoints" 
    ds.title = "Pollen harvested" 
    ds.using = "1:2" 
    end 
end 
+0

非常感谢!我没有足够的声望来解决这个问题( – user3427801