2016-11-20 2 views
1

Der Versuch, ein Liniendiagramm mit mehreren Reihen zu erstellen. (Visualizer ist Chartjs.) Aus dem README:Schienen Chartkick. Liniendiagramm mit mehreren Reihen und verschachteltem Hash

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

Meine Daten sind bereits im JSON-Format kommt, aber braucht ein wenig Manipulation richtig zu machen. Rohform sieht wie folgt aus:

=> [{"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 

Also, mit markets.map{ |m| [name: m['runner'], data: m['histories'].map{|h| [h['created_at'], 1/h['price']] }]}.flatten! , die ergibt:

=> [ 
{: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 

Obwohl ich nicht einen Fehler, das Diagramm ist eine leere Quadranten mit [object Object] bei 0,0 .

Das Diagramm ist in einem @markets.each Block meiner Ansicht nach, weil ich mehrere Diagramme die Seite erstellen möchte, die dasselbe mit anderen Daten zeigt. Ich spielte mit einem .each_with_index um, und ich kann die Grafik teilweise nur um zu zeigen, zu erhalten, indem die Daten manuell wie die README zeigt Eingabe:

<%= 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']]}} 
    ] %> 

, die die ersten beiden Reihen auf dem Chart zeigt, kann aber nicht die richtige sein So wie es verschiedene i-Elemente für jedes Diagramm gibt.

Was kann ich tun?

Antwort

0

Ermittelt mit .each Methode. Ich bin mir sicher, es gibt einen saubereren Weg, dies zu tun, aber es funktioniert jetzt.

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 
Verwandte Themen