0

我正在尝试将 csv 文件解析为惰性高图表。

我使用回形针上传了 csv 文件,但在解析数据时遇到问题,我不确定该怎么做。

csv 文件有 3 列。第 2 列和第 3 列是我希望访问的列。第 2 列是日期,第 3 列是温度。

控制器

   def show
    @soiltemp = Soiltemp.find(params[:id])
    @data = CSV.parse(@soiltemp.csv.path, :headers => true, :encoding => 'ISO-8859-1')
    dates = []
    temps = []
    @data.each do |row|
    dates << row[1]
    temps << row[2]
        end
    @graph = LazyHighCharts::HighChart.new('graph') do |f|
      f.title({ :text=>"Combination chart"})
      f.options[:xAxis][:categories] = dates
      f.series(:type=> 'area', :name=> 'Degree', :data => [temps], :color => '#00463f')  
    end
    @hash = Gmaps4rails.build_markers(@soiltemps) do |soiltemps, marker|
      marker.lat soiltemps.latitude
      marker.lng soiltemps.longitude
      marker.infowindow render_to_string(partial: 'soiltemps/map')
    end

看法

<%= high_chart("chart", @graph) %>
<p><b>Last Updated:</b> <%= @soiltemp.updated_at.strftime("%d %B, %Y") %></p>

<%= link_to 'Back', soiltemps_path %>
4

1 回答 1

0

看起来您需要每列中的值数组来提供给您的高位图表series。您将遍历 csv 数据 ( @data.each) 的每一行,并且块中的每一行本身就是 csv 每一列中的值的数组,但索引为 0。因此,要获得第 2 列,您需要row[1].

这是你可以做的:

def show
    @soiltemp = Soiltemp.find(params[:id])
    @data = CSV.parse(@soiltemp.csv.path, :headers => true, :encoding => 'ISO-8859-1')

    dates = []
    temperatures = []

    @data.each do |row|
      dates << row[1] # column 2
      temperatures << row[2] # column 3
    end

    @graph = LazyHighCharts::HighChart.new('graph') do |f|
      f.title({ :text=>"Combination chart"})
      # make the csv row headers the graph's categories
      f.options[:xAxis][:categories] = @data.headers
      f.series(:data => dates, ...rest of options)  
      f.series(:data => temperatures, ...rest of options)
    end
    ... rest of code ...
end

您将哪个数组(日期或临时)分配给哪个系列取决于您。希望有帮助。

于 2013-11-15T06:19:39.250 回答