需要指导使用 .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_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 都有自己的线。
有人可以帮我解决这个问题,这样我就能得到我想要的结果吗?
当您将这些选项中的任何一个放入 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) %>
这不限于任何用户/日期(期间)。您必须将其包含在上面的代码中。
试试这个,如果失败请告诉我。
我正在尝试在 Rails 应用的 Ruby 中使用 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 都有自己的线。
有人可以帮我解决这个问题,这样我就能得到我想要的结果吗?
当您将这些选项中的任何一个放入 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) %>
这不限于任何用户/日期(期间)。您必须将其包含在上面的代码中。
试试这个,如果失败请告诉我。