需要指导使用.map,.group,.pluck等在rails应用程序的ruby中制作多系列折线图

时间:2017-08-09 16:58:33

标签: ruby-on-rails arrays ruby chartkick

我正在尝试使用Ruby on Rails应用程序中的chartkick显示多系列折线图。

图表应在某段时间内显示paper_types和每种类型的weight

屏幕添加

enter image description here

这是我的最新尝试

<%= 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显示单独的行。 enter image description here

我正在寻找是一个类似于下面屏幕截图的图表,每个paper_type都有它自己的行。

enter image description here

有人可以帮我解决这个问题,以便得到我想要的结果吗?

2 个答案:

答案 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 ] %>