Ich möchte ein paar der technischen Beispiele in meiner Anwendung verwenden, habe aber Mühe, meine eigenen Daten zu verwenden.Verwenden von techanJS D3-Beispielen mit JSON-Daten
Hier ist die example code for the close chart, die ich verwenden möchte.
Ich habe ein Spiel! Framework-Anwendung, die in einer Liste geht [CloseList] Array, wird diese dann in ein JSON-Objekt:
var closesJSON = @{Html(new Gson().toJson(closes))};
ich dann gehe davon aus, dass ich in der Lage sein wird, d3.csv() mit d3.json zu ersetzen () aber ich finde kein funktionierendes Beispiel und mein Hacking hat mich bisher nirgendwo hingebracht.
d3.csv("data.csv", function(error, data) {
var accessor = close.accessor();
data = data.slice(0, 200).map(function(d) {
return {
date: parseDate(d.Date),
open: +d.Open,
high: +d.High,
low: +d.Low,
close: +d.Close,
volume: +d.Volume
};
}).sort(function(a, b) { return d3.ascending(accessor.d(a), accessor.d(b)); });
x.domain(data.map(accessor.d));
y.domain(techan.scale.plot.ohlc(data, accessor).domain());
svg.append("g")
.datum(data)
.attr("class", "close")
.call(close);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text("Price ($)");
});
Code hier arbeiten, macht dies:
d3.json("/api/closedata/@equity.getId", function(error, data) {
var accessor = close.accessor();
data = data.map(function(d,i) {
console.log(d.high);
return {
date : parseDate(d.closeDate),
open : d.openPrice,
high : d.high,
low : d.low,
close : d.closePrice,
volume : d.volume
}
}).sort(function(a, b) { return d3.ascending(accessor.d(a), accessor.d(b)); });
x.domain(data.map(accessor.d));
y.domain(techan.scale.plot.ohlc(data, accessor).domain());
svg.append("g")
.datum(data)
.attr("class", "close")
.call(close);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text("Price ($)");
});
Danke Florian, siehe aktualisierten Code. Nicht sicher, wie der Rückruf aufgebaut wird. Meine Attributnamen sehen in Ordnung aus, ich kann die Werte während der ForEach-Schleife in die Konsole ausgeben. Ok – user2670815
Ich denke, Ihr Fehler ist in der Foreach. Vor allen Ihren numerischen Werten müssen Sie ein "+" setzen: öffnen: + d.openPrice Aber ich verstehe nicht, warum Sie nicht die Kartenfunktion wie der Code verwenden, der im Beispiel genommen wird. Es funktioniert normalerweise auch mit einem JSON. Haben Sie den Code getestet, indem Sie nur den Namen des Attributs geändert und die Kartenfunktion beibehalten haben (anstatt Ihrer foreach)? –
Wow, hat es gerendert :) Mit map anstelle von forEach, vielen Dank, es ist schon Wochen her und wieder damit herumgespielt! Ich habe den Code in der Frage auf die Arbeitsversion aktualisiert. – user2670815