我有每天由用户通过表单添加的数据。其中一些领域记录了温度:ambcur,:ambmin,:ambmax等 这是具有数据记录的托盘的所有部分
我正在使用chartkick并且很棒,但我不确定如何随时间显示数据。
我正在尝试进行多张流程图。
<%= line_chart [
{name: "Series A", data: @tray.datalogs.ambcur},
{name: "Series B", data: @tray.datalogs.ambmin}
] %>
此外,单数线图也不起作用。
<%= line_chart @tray.datalogs.group(:ambcur).count %>
有人可以帮助引导我朝着正确的方向前进吗?谢谢:))
答案 0 :(得分:5)
您的代码存在的问题是您没有将正确的数据格式传递给line_chart
。要绘制折线图,数据必须采用哈希的格式,如下所示:
<%= line_chart {"2016-05-21 23:50:40 UTC"=>20, "2016-05-21 23:50:57 TC"=>23} %>
{&#34; 2016-05-21 23:50:40 UTC&#34; =&gt; 20,&#34; 2016-05-21 23:50:57 UTC&#34; =&gt ; 23} 强>
在前面的示例中,您将日期(字符串)视为哈希的键,值(整数)是20和23。 在您的情况下,您需要一个哈希,其中键是哈希的日期和值是最大,最小或当前温度。 {&#34; date_1&#34; =&GT;数字,&#34; date_2&#34; =&GT;号码,...}
为了测试我的代码,我创建了一个名为 Temperature 的模型。这是表格:
create_table "temperatures", force: :cascade do |t|
t.integer "max", limit: 4
t.integer "min", limit: 4
t.integer "current", limit: 4
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
在我看来,我称之为:
<%= line_chart [
{name: "Series A", data: Temperature.all.inject({}) {|res, v| res[v[:created_at]] = v.max; res }},
{name: "Series B", data: Temperature.all.inject({}) {|res, v| res[v[:created_at]] = v.current; res }},
{name: "Series C", data: Temperature.all.inject({}) {|res, v| res[v[:created_at]] = v.min; res }}
] %>
我得到了3行显示最大,最小和当前温度的情节。
我使用inject
方法创建一个哈希,其中键是日期,值是模型 Temeperature 的属性[max,min,current]。有关注入方法的其他信息,请阅读this stackoverflow thread。
在你的情况下你应该试试这个:
<%= line_chart [
{name: "Series A", data: @tray.datalogs.inject({}) {|res, v| res[v[:created_at]] = v.ambmax; res }},
{name: "Series B", data: @tray.datalogs.inject({}) {|res, v| res[v[:created_at]] = v.ambcur; res }},
{name: "Series C", data: @tray.datalogs.inject({}) {|res, v| res[v[:created_at]] = v.ambmin; res }}
] %>