[英]Displaying data using Chartkick
我有每天由用戶通過表單添加的數據。 這些領域中的一些記錄溫度: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 %>
有人可以幫助引導我朝着正確的方向前進嗎? 謝謝 :)
代碼的問題在於您沒有將正確的數據格式傳遞給line_chart
。 要繪制折線圖,數據必須采用哈希的格式,如下所示:
<%= line_chart {"2016-05-21 23:50:40 UTC"=>20, "2016-05-21 23:50:57 TC"=>23} %>
{“2016-05-21 23:50:40 UTC”=> 20,“2016-05-21 23:50:57 UTC”=> 23}
在前面的示例中,您將日期(字符串)視為哈希的鍵,值(整數)是20和23.在您的情況下,您需要一個哈希,其中鍵是哈希的日期和值是最大值,最小值或者目前的溫度。 {“date_1”=>數字,“date_2”=>數字,...}
為了測試我的代碼,我創建了一個名為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
方法創建一個Hash,其中鍵是日期,值是模型Temeperature的屬性[max,min,current]。 有關注入方法的其他信息,請閱讀此stackoverflow線程 。
在你的情況下你應該試試這個:
<%= 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 }}
] %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.