我正在尝试使用Ruby on Rails应用程序中的chartkick
显示多系列折线图。
图表应在某段时间内显示paper_types
和每种类型的weight
。
屏幕添加
这是我的最新尝试:
<%= line_chart [
{name: @pappi.map{|p| [p.paper_type]}, data: @pappi.map{|t| [t.date, t.paper_weight] }, 'interpolateNulls':true}
] %>
@pappi = Paper.all
上面的代码如下图所示输出,其中每个paper_type
在一行上向上舍入,而不是为每个paper_type
显示单独的行。
我正在寻找是一个类似于下面屏幕截图的图表,每个paper_type都有它自己的行。
有人可以帮我解决这个问题,以便得到我想要的结果吗?
答案 0 :(得分:3)
我没有对此进行测试,只阅读了文档并得出以下结论:
line_chart
希望你给出这样的结构:(来自Javascript文档)
line_chart [
{ name: 'Line1', data: { '2017-01-01' => 2, '2017-01-08' => 3 } },
{ name: 'Line2', data: { '2017-01-01' => 1, '2017-01-08' => 7 } },
]
# try it in your view to make sure it works as described below
这将创建一个包含2行(Line1和Line2)的图表,水平轴将包含2个值2017-01-01和2017-01-08,垂直轴将是一个刻度,可能从1到7(min从数据到数据的最大值。
在您的上下文中使用数据结构:
规格(如果我错了,请纠正我):
paper_type
weight
给定paper_type
和给定日期的值对象映射以匹配所需的数据结构:
# controller
all_paper_type_values = Paper.all.pluck(:paper_type).uniq
@data_for_chart = all_paper_type_values.map do |paper_type|
{ name: paper_type, data: Paper.where(paper_type: paper_type).group_by_month(:created_at).sum(:weight) }
end
# view
<%= line_chart(@data_for_chart) %>
这不是任何用户/日期(句点)的范围。您必须在上面的代码中包含它。
试试这个,如果失败请告诉我。
答案 1 :(得分:0)
将任何这些选项放入rails控制台时会发生什么?你有多个系列的数据吗?
你试过吗?
<%= line_chart [ name: paper.paper_type, data: current_user.papers.group(:paper_type).group_by_week(:created_at).count ] %>