Overlay-Kreis, text, etc. über d3.js multi-Linien Serie
Habe ich die multi-series line-chart code mit leichten Modifikationen, um meine Daten. Dies ist, was ich Wünsche zu tun, und keine Lösung habe ich angeschaut, scheint richtig zu funktionieren für mich. Ich möchte overlay-element (Kreis, rectange, ausgeblendet, je nachdem, welcher) über jedem Punkt auf der Linie, so dass ich konnte fügen Sie dann einen mouseover-element in diesem Punkt ein Feld angezeigt, mit Daten mit der d....Zeit, d....jobID und wie viel, das unterscheidet sich von einem durchschnittlichen. Wenn möglich, möchte ich die Lösung nur tun dies, um die Haupt-Linie (die unterschiedliche Linie) eher als die zwei gezeichneten Linien repräsentieren den Mittelwert. Hier habe ich ein Bild von der Grafik wie Sie ist für die visuelle Inspektion. Wenn das nicht funktioniert, habe ich auch befestigt.
Ich habe ein wenig den code unten.
d3.tsv("values.tsv", function(error, data) {
color.domain(d3.keys(data[0]).filter(function(key) { return key !== "time" && key !== "jobID"; }));
data.forEach(function(d) {
d.time = parseDate(d.time);
d.jobID = parseInt(d.jobID);
});
var points = color.domain().map(function(name) {
return {
name: name,
values: data.map(function(d) {
return {time: d.time, jobID: d.jobID, value: parseFloat(d[name],10)};
})
};
});
....
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", 7)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text("mbps");
var point = svg.selectAll(".point")
.data(points)
.enter().append("g")
.attr("class", "point");
point.append("path")
.attr("class", "line")
.attr("d", function(d) { return line(d.values); })
.style("stroke", function(d) { return color(d.name); });
point.append("text")
.datum(function(d) { return {name: d.name, jobID: d.jobID, value: d.values[d.values.length - 1]}; })
.attr("transform", function(d) { return "translate(" + x(d.value.time) + "," + y(d.value.value) + ")"; })
.attr("x", 6)
.attr("dy", ".7em")
.text(function(d) { return d.name; });
});
Ich habe bereits versucht den folgenden code, nur um zu sehen, ob es geklappt hat mit meiner Implementierung:
point.append("svg:circle")
.attr("stroke", "black")
.attr("fill", function(d, i) { return "black" })
.attr("cx", function(d, i) { return x(d.time) })
.attr("cy", function(d, i) { return y(d.value) })
.attr("r", function(d, i) { return 3 });
Danke Euch allen für Eure Hilfe im Voraus. D3.JS scheint ein ziemlich awesome Stück Arbeit, und ich bin glücklich, es zu haben.
EDIT: jsfiddle
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der trick ist, übergeben Sie die Daten erneut, um eine Auswahl und arbeiten Sie dann auf dieses Ergebnis. Haben Sie einen Blick auf Mike ' s tutorial für einige Hintergrundinformationen und Beispiele.
Habe ich geändert, jsfiddle hinzufügen Kreisen hier. Anbringen
svg:title
Elemente oder sonst etwas tun, um zu zeigen, mehr Informationen sollte einfach sein. Beachten Sie, dass ich Sie modifiziert habe dein code zum erstellen der Daten-Punkte geringfügig um den Namen mit jedem element. Auf diese Weise wird nur eine weitere Ebene der Selektionen erforderlich ist (behandeln Sie alle Punkte, die gleichen, und fügen Sie Sie in einem einzigen Durchgang). Der sauberere Weg, dies zu lösen, von einem code-design-Sicht wäre zu haben, 2 zusätzliche Ebenen-zunächst eine Auswahl für die Punkte für eine einzelne Linie (und fügen Sie einesvg:g
- element zu gruppieren) und fügen Sie dann die Punkte, die innerhalb dieser Gruppe. Damit wäre der code ein bisschen komplizierter und schwieriger zu verstehen, aber.