使用 Chartkick 和 Rails 的多系列折线图
Multiple Series Line Chart Using Chartkick and Rails
我正在尝试设置一个多系列折线图,按模式显示每月总检查。
类似于此图表的内容:
我想要为模态着色:
(CT、MR、美国、XR、MG、BD、NM)
每月日期 (to_date) 将作为 X 轴数据标签。
考试模型:
has_many :modalities
模态模型:
belongs_to :exam
我在我的图表控制器上有一个 monthly_modalities 操作:
def monthly_modalities
chart_data = Modality.joins(:exam).map {|m|
{name: m.name, data: m.exam.to_date}
}
render json: chart_data.each do |e|
{name: :name, data: e.group_by_month(:to_date, format: '%b', range: 1.year).sum(:total).chart_json}
end
end
这是创建的图表:
问题是重复的模式没有组合在一起,X 轴数据标签上没有显示每月日期 (to_date)。
我不知道你是否还在寻找答案,但我今天才知道如何去做。我有一个类似的问题,但你必须稍微玩一下代码才能让它为你工作。这里是。我希望它能帮助你,但对我来说效果很好。
我会用你的数据试一试,试着告诉我它是否有效,将其粘贴到你相应的视图中:
<%= column_chart Modality.joins(:exam).group('exams.name').group_by_month(:to_date, format: '%b', range: 1.year).sum(:total) %>
关于这个问题,我最终 但更具体的是我是如何遍历和输出数据的。
这是我解决这个问题的方法:
now = Time.now
chart_data = Modality.joins(:exam)
.where(exams: {from_date: (now - 1.year)..now}).map {|m|
{name: m.name, data: {m.exam.from_date => m.total}}}
@exams = chart_data.group_by {|h| h[:name]}
.map {|k, v| {name: k, data: v.map {|h| h[:data]}.reduce(&:merge)}}
这是显示图表所需的哈希值:
[
{:name=>"MR", :data=>{Wed, 01 Feb 2017=>41, Wed, 01 Mar 2017=>66, Sat, 01 Apr 2017=>73, Sun, 01 Jan 2017=>44}},
{:name=>"CT", :data=>{Wed, 01 Feb 2017=>4, Wed, 01 Mar 2017=>6, Sat, 01 Apr 2017=>8, Sun, 01 Jan 2017=>52}},
{:name=>"XR", :data=>{Wed, 01 Mar 2017=>1}},
{:name=>"US", :data=>{Sat, 01 Apr 2017=>1, Sun, 01 Jan 2017=>1}}
]
在我看来,我是这样渲染图表的:
<%= line_chart @exams %>
正确的图表:
我正在尝试设置一个多系列折线图,按模式显示每月总检查。
类似于此图表的内容:
我想要为模态着色: (CT、MR、美国、XR、MG、BD、NM)
每月日期 (to_date) 将作为 X 轴数据标签。
考试模型:
has_many :modalities
模态模型:
belongs_to :exam
我在我的图表控制器上有一个 monthly_modalities 操作:
def monthly_modalities
chart_data = Modality.joins(:exam).map {|m|
{name: m.name, data: m.exam.to_date}
}
render json: chart_data.each do |e|
{name: :name, data: e.group_by_month(:to_date, format: '%b', range: 1.year).sum(:total).chart_json}
end
end
这是创建的图表:
问题是重复的模式没有组合在一起,X 轴数据标签上没有显示每月日期 (to_date)。
我不知道你是否还在寻找答案,但我今天才知道如何去做。我有一个类似的问题,但你必须稍微玩一下代码才能让它为你工作。这里是
我会用你的数据试一试,试着告诉我它是否有效,将其粘贴到你相应的视图中:
<%= column_chart Modality.joins(:exam).group('exams.name').group_by_month(:to_date, format: '%b', range: 1.year).sum(:total) %>
关于这个问题,我最终
这是我解决这个问题的方法:
now = Time.now
chart_data = Modality.joins(:exam)
.where(exams: {from_date: (now - 1.year)..now}).map {|m|
{name: m.name, data: {m.exam.from_date => m.total}}}
@exams = chart_data.group_by {|h| h[:name]}
.map {|k, v| {name: k, data: v.map {|h| h[:data]}.reduce(&:merge)}}
这是显示图表所需的哈希值:
[
{:name=>"MR", :data=>{Wed, 01 Feb 2017=>41, Wed, 01 Mar 2017=>66, Sat, 01 Apr 2017=>73, Sun, 01 Jan 2017=>44}},
{:name=>"CT", :data=>{Wed, 01 Feb 2017=>4, Wed, 01 Mar 2017=>6, Sat, 01 Apr 2017=>8, Sun, 01 Jan 2017=>52}},
{:name=>"XR", :data=>{Wed, 01 Mar 2017=>1}},
{:name=>"US", :data=>{Sat, 01 Apr 2017=>1, Sun, 01 Jan 2017=>1}}
]
在我看来,我是这样渲染图表的:
<%= line_chart @exams %>
正确的图表: