首页 文章

使用Chartkick和Rails的多系列折线图

提问于
浏览
1

我正在尝试设置一个多系列折线图,按行式显示每月总考试 .

与此图表类似的东西:

enter image description here

我想要模式的颜色:(CT,MR,US,XR,MG,BD,NM)

月度日期(to_date)将是X轴数据标签 .

考试模型:

has_many :modalities

模态模型:

belongs_to :exam

我的Charts控制器上有一个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

这是创建的图表:

enter image description here

问题是重复模式不是分组在一起,而且每月日期(to_date)没有显示在X轴数据标签上 .

2 回答

  • 1

    关于这个问题,我最终得到了asking another question,但更具体地讲述了我如何循环并输出数据 .

    这是我解决这个问题的方式:

    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 %>
    

    和正确的图表:

    enter image description here

  • -1

    我不知道你是否还在寻找答案,但我今天才知道如何去做 . 我有类似的问题,但你必须稍微使用代码才能让它适合你 . 这是LINK . 我希望它会对你有所帮助,但对我来说它运作良好 .
    我将使用您的数据进行拍摄,尝试告诉我它是否有效,将其粘贴到相应的视图中:

    <%= column_chart Modality.joins(:exam).group('exams.name').group_by_month(:to_date, format: '%b', range: 1.year).sum(:total) %>
    

相关问题