Reputation: 387
I'm trying to display a multi series line chart using chartkick
in a Ruby on Rails app.
The chart should display paper_types
and the weight
for each type during some time period.
SCREENSHOT ADDED
This is my latest try:
<%= line_chart [
{name: @pappi.map{|p| [p.paper_type]}, data: @pappi.map{|t| [t.date, t.paper_weight] }, 'interpolateNulls':true}
] %>
Where @pappi = Paper.all
The code above outputs as the picture below, where every paper_type
rounds up on one single line, instead of showing separate lines for each paper_type
.
What I'm looking for is a chart similar to the screenshot below, were each paper_type has it's own line.
Can someone please help me with this so I can get the outcome I want?
Upvotes: 1
Views: 752
Reputation: 54882
I did not test this, only read the doc and concluded the following:
line_chart
expects you to give argument structured like this: (from the Javascript documentation)
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
This will create a chart with 2 lines (Line1 and Line2), horizontal axis will contain 2 values 2017-01-01 and 2017-01-08 and the vertical axis will be a scale, probably from 1 to 7 (min from data to max from data).
Following this data structure in your context:
Specs (correct me if I am wrong):
paper_type
weight
value for a given paper_type
and a given dateObject mapping to match the desired data structure:
# 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) %>
This is no scoped to any user / dates (period). You will have to include this in the code above.
Try this and let me know if it fails.
Upvotes: 3
Reputation: 31
What happens when you put any of these options in the rails console? Do you get multiple series of data?
Have you tried?
<%= line_chart [ name: paper.paper_type, data: current_user.papers.group(:paper_type).group_by_week(:created_at).count ] %>
Upvotes: 0