【问题标题】:Rails Chartkick. Multiple Series line chart with nested hashRails Chartkick。具有嵌套哈希的多个系列折线图
【发布时间】:2016-11-20 20:18:56
【问题描述】:

尝试制作多系列折线图。 (Visualizer 是 Chartjs。)来自README

<%= line_chart [
  {name: "Series A", data: series_a},
  {name: "Series B", data: series_b}
] %>

我的数据已经采用 JSON 格式,但需要进行一些操作才能正确。原始表单如下所示:

=> [{"id"=>30,
  "runner"=>"Golden State Warriors",
  "price"=>1.51,
  "histories"=>[{"price"=>1.51, "created_at"=>"2016-11-19T17:42:18.699Z"}, {"price"=>1.51, "created_at"=>"2016-11-20T07:56:55.662Z"}]},
 {"id"=>32, ETC

所以,与 markets.map{ |m| [name: m['runner'], data: m['histories'].map{|h| [h['created_at'], 1/h['price']] }]}.flatten! 产生:

=> [
{:name=>"Golden State Warriors", :data=>[["2016-11-19T17:42:18.699Z", 0.6622516556291391], ["2016-11-20T07:56:55.662Z", 0.6622516556291391]]},
{:name=>"Los Angeles Clippers", :data=>[["2016-11-19T17:42:18.795Z", 0.1], ["2016-11-20T07:56:55.717Z", 0.1]]}, ETC

虽然我没有收到错误,但图表是一个空的象限,[object Object] 位于 0,0。

该图表在我的视图中位于 @markets.each 块中,因为我想创建多个图表以显示具有不同数据的相同内容的页面。我玩了.each_with_index,我可以通过手动输入数据来部分显示图表,就像README 显示的那样:

<%= line_chart [
      {name: markets[i]['runner'], data: markets[i]['histories'].map{|h| [h['created_at'], 1/h['price']]}},
      {name: markets[i+1]['runner'], data: markets[i+1]['histories'].map{|h| [h['created_at'], 1/h['price']]}}
    ] %>

这显示了图表上的前两个系列,但不可能是正确的方式,因为每个图表都有不同的 i 元素。

我能做什么?

【问题讨论】:

    标签: ruby-on-rails json charts chartkick


    【解决方案1】:

    使用.each 方法解决了这个问题。我确信有一种更清洁的方法可以做到这一点,但它现在正在工作。

    def chart(markets)
      chart_data = markets.map{ |m| [name: m['runner'], data: m['histories'].map{|h| [h['created_at'], 1/h['price']]}]}.flatten
      line_chart chart_data.each do |m| 
        [{name: [:name], data: [:data]}]
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多