0

私は LazyHighCharts を使用しており、json データを収集して過去 24 時間のみを表示しようとしていますが、データは表示されず、日付だけが表示されますが、1 時間ごとに温度が表示されるはずです)。

データ構造

{"status": "ok", "data": [{"2014-06-16 16:00:00": 24.2},{"2014-06-17 12:00:00": 30.2},{"2014-06-18 17:00:00": 42.9}]} etc

コントローラ

@data = JSON.parse(open(@temperature.url).read)

dates = []
temps = []

@data['data'].each do |data|
 dates << data.keys
 temps << data.values
end 

@graph = LazyHighCharts::HighChart.new('graph') do |f|
 f.chart(:height => '400')
 f.yAxis [:title => {:text => "Temperature", :margin => 20, style: { color: '#333'}}]
 f.series(:pointInterval => 1.hour, :pointStart => 30.day.ago, :type => 'area', :name => '24hrs', :data => [[dates, temps]])
 f.options[:xAxis] = { :minTickInterval => 24 * 3600 * 1000, :type => "datetime", :dateTimeLabelFormats => { day: "%b %e"}, :title => { :text => nil }, :labels => { :enabled => true } }
end

画像

ここに画像の説明を入力

4

2 に答える 2

1

datetime オブジェクトを JS ミリ秒規則に変換するには、単に呼び出します

DateTime.now.to_i*1000 

またはあなたの場合

def index
  @data = {"status" => "ok", "data" => [{"2014-06-16 16:00:00" => 24.2},{"2014-06-17 12:00:00" => 30.2},{"2014-06-18 17:00:00" => 42.9}]}
  d = []
  @data['data'].each do |data|
    d << [DateTime.parse(data.keys.first).to_i*1000, data.values.first]
  end 

  @chart = LazyHighCharts::HighChart.new('chart') do |f|
    f.chart(:height => '400')
    f.yAxis [:title => {:text => "Temperature", :margin => 20, style: { color: '#333'}}]
    f.xAxis(type: 'datetime')
    f.series(:type => 'area', :name => '24hrs', :data => d)
  end
end
于 2014-09-26T10:30:11.193 に答える