Highcharts,Rails - 设置图表起点的方法?

时间:2017-01-14 01:24:33

标签: javascript ruby-on-rails highcharts

在我的图表上,我正在尝试更改图表的起点但不起作用:

series: [{
            name: 'Difficulty',
            connectNulls:true,
            color: '#FF0000',
            pointInterval: <%= 1.day * 1000 %>,
            pointStart: <%= 2.weeks.ago.at_midnight.to_i * 1000 %>,
            data: [<% HomeworkStudent.where(:school_user_id => current_user.school_user.id).order('updated_at ASC').each do | homework_student| %>
            [Date.parse(<%= homework_student.updated_at.to_json.html_safe %>), <%= homework_student.difficulty.to_json.html_safe %>],
            <% end %>]
            },

我的图表有效,但忽略了pointStart。如上所述我试图在我的表中使用updated_at属性。我知道上面的代码可能不是用Highcharts获取和呈现数据的理想方式,所以欢迎任何建议来清理它。

我需要做些什么改变才能让pointStart工作?

由于

enter image description here

1 个答案:

答案 0 :(得分:1)

首先,您需要将数据中的x-axis更改为时代,或者将图表中的时间间隔更改为毫秒(纪元时间)。

因此,您的数据应该更像:

data: <%= HomeworkStudent.
    where(:school_user_id => current_user.school_user.id).
    order('updated_at ASC').map {|e| [e.updated_at.to_i * 1000, e.id]}.
    to_a.to_json.html_safe %>

也许你还应该添加一个关于你选择的过滤器。它不应该超过两周前:

data: <%= HomeworkStudent.
    where(:school_user_id => current_user.school_user.id).
    where('updated_at > ?', 2.weeks.ago.at_midnight).
    order('updated_at ASC').map {|e| [e.updated_at.to_i * 1000, e.id]}.
    to_a.to_json.html_safe %>

除此之外,您当然可以使用不是数字的标签,而是实际的单词。这有点复杂......

......或不......

您跳过(如“完全不使用”)以下内容:

pointInterval: <%= 1.day * 1000 %>,
pointStart: <%= 2.weeks.ago.at_midnight.to_i * 1000 %>,

在数据数组中使用数据值对:

data: <%= HomeworkStudent.
    where(:school_user_id => current_user.school_user.id).
    where('updated_at > ?', 2.weeks.ago.at_midnight).
    order('updated_at ASC').
    group_by {|e| e.updated_at.to_date}. # Group them rails-wise, not db-engine specific
    map {|e| [e.first.to_s, e.second.sum(&:difficulty)] }. # get date and sum of difficulties, format e.first as you wish with **strftime**
    to_json.html_safe %>