代码之家  ›  专栏  ›  技术社区  ›  codegirl

需要指导才能使用.map.group,。在ruby on rails应用程序中制作多系列折线图

  •  3
  • codegirl  · 技术社区  · 8 年前

    chartkick 在Ruby on Rails应用程序中。

    图表应显示 paper_types weight 在一段时间内,针对每种类型。

    enter image description here

    最新尝试

    <%= 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 纸张类型 . enter image description here

    我在找什么 下面是一个类似于截图的图表,每个paper_类型都有自己的行。

    enter image description here

    2 回复  |  直到 8 年前
        1
  •  3
  •   MrYoshiji    8 年前

    我没有对此进行测试,只是阅读了文档并得出以下结论:

    line_chart

    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条线(第1行和第2行)的图表,横轴将包含2个值2017-01-01和2017-01-08,纵轴将是一个比例,可能从1到7(从数据中的最小值到数据中的最大值)。


    遵循此数据结构 在您的环境中

    规格(如果我错了,请纠正我):

    • 每种不同类型一行 paper_type
    • weight 纸张类型 和给定日期

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

    这不适用于任何用户/日期(期间)。你必须在上面的代码中包含这一点。

        2
  •  0
  •   Stuart    8 年前

    在rails控制台中放置这些选项时会发生什么?你有多个系列的数据吗?

    你试过了吗?

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