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

Need guidance to use .map,.group,.pluck, etc. to make multi series line chart in ruby on rails app

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

图表应在某个时间段内显示每种类型的 paper_typesweight

已添加屏幕截图

这是我的最新尝试

<%= 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 都有自己的线。

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

当您将这些选项中的任何一个放入 rails 控制台时会发生什么?你得到多系列的数据吗?

你试过了吗?

<%= line_chart [ name: paper.paper_type, data: current_user.papers.group(:paper_type).group_by_week(:created_at).count ] %>

我没有测试这个,只阅读了文档并得出以下结论:

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 (数据的最小值到数据的最大值)。


遵循此数据结构在您的上下文中

规格(如有错误请指正):

  • 每个不同的一行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) %>

这不限于任何用户/日期(期间)。您必须将其包含在上面的代码中。

试试这个,如果失败请告诉我。