Ich benutze d3, um ein Streudiagramm zu erstellen, und die Menge der Werte, die ich für die x- und y-Achsen habe, haben beide positive und negative Werte. Dies ist mein erster Versuch, d3 zu verwenden, und ich habe aus einführenden Tutorials wie On the tenth day of Xmas, get dirty with data using d3.js gelernt, dass der Schlüssel das richtige Einrichten der X- und Y-Skalen ist.Wie kann ich positive und negative Werte für beide Achsen in einem Streudiagramm mit d3 darstellen?
Als nächstes fand ich dieses Tutorial: Bar Chart with Negative Values, das hat mir fast geholfen, es richtig zu machen (denke ich). Mein Datensatz zu kräftig ist hier zu platzieren, aber hier ist der Code Ich habe eine Probe meiner Daten mit arbeiten: Ehrlich gesagt
<div id="compareAll"></div>
<script>
window.onload = function() {
var dataSet = [ [4,4], [-4,4], [-4,-4], [4,-4], ];
var x0 = Math.max(-d3.min(dataSet[0]), d3.max(dataSet[0]));
var xScale = d3.scale.ordinal()
.domain([-x0,x0])
.range([0,10]);
var yScale = d3.scale.ordinal()
.domain(d3.range(dataSet[1])
.rangeRoundBands([0,10]);
var svg = d3.select("#compareAll")
.append("svg")
.attr("width", 10)
.attr("height",10)
svg.selectAll("circle")
.data(dataSet)
.enter()
.append("circle")
.attr("cx", function(d) {
return xScale(d[0]);
})
.attr("cy", function(d) {
return yScale(d[1]);
})
.attr("r",4);
var xAxis = d3.svg.axis()
.scale(xScale)
.tickSize(1);
var yAxis = d3.svg.axis()
.scale(yScale)
.tickSize(1);
svg.append("svg:g")
.attr("class", "x axis")
.attr("transform", "translate(0,10)")
.call(xAxis);
svg.append("svg:g")
.attr("class", "y axis")
.attr("transform", "translate(10,0)")
.call(yAxis);
}
</script>
, verstehe ich nicht die Verwendung der Ordinalskala im Balkendiagramm Beispiel, aber ich habe schlechtere Ergebnisse bekommen, als ich es herausgenommen habe und die yScale mit der gleichen Syntax wie die xScale gemacht habe.
Jede Erklärung der besten Art, mit positiven und negativen Werten für beide Achsen zu arbeiten, wäre willkommen. Lass es mich wissen, wenn ich etwas Offensichtliches vermisse. Ich gehe dieses Beispiel aus einem viel größeren Projekt zusammen, um es so spezifisch und leicht lesbar wie möglich zu machen.
Danke!
realisiert gerade eine Ordinalskala war definitiv nicht der richtige Weg für die y-Achse zu gehen. Nach dem Lesen der API-Dokumentation zu Ordinalskalen, die auf das Balkendiagramm-Tutorial angewendet wurden, weil die Y-Achse keine Menge von Werten darstellt, sondern die hypothetischen Kategorien, die die Balken darstellen. Ein Blick auf die Verwendung einer linearen Skala für die x- und y-Achse. Irgendeine Idee, warum die Y-Achse horizontal hochgehen sollte? – eyount