Noah Bubenhofer, 28. Oktober 2014
ssh://git@pub.cl.uzh.ch:11022/bubenhofer/vislingkurs.git
<html> <head> <meta> <script src="http://d3js.org/d3.v3.min.js"></script> // Referenz zur D3-Bibliothek <style type="text/css"> // Style-Angaben für die Darstellung aller Elemente (HTML und SVG) </style> </meta> </head> <body> // Hier kommen HTML-Elemente zur Seitengestaltung, Navigation etc. <script type="text/javascript"> // Javascript-Anweisungen zur Visualierung mit D3 </script> </body> </html>
Wir rufen zunächst die zu visualisierenden Daten auf:
d3.csv()
eine CSV-Dateid3.tsv()
eine Tab-separierte Dateid3.json()
JSON-formatierte Datend3.csv("meinedaten.csv", function(error, data) { // Wir machen etwas mit den Daten. }
d3.json("php/dbquery.php?query=query", function(error, data) { // Wir machen etwas mit den Daten. }
d3.select
-Funktion, um ein DOM-Element auf der Webseite zu adressieren und daran ein SVG-Element anzubringenvar svg = d3.select("#container").append("svg") .attr("width", 700) .attr("height", 500)
svg
-Element mit den Attributen width
und height
wird daran angehängtvar places = svg.selectAll("g") .data(data) .enter() .append("g") .attr("id", function(d) { return "id"+ d.id; }) var marker = places.append("circle") .attr("r", "20") .attr("fill", "black");
g
-Elementen verknüpfen (mit denen wir die nachfolgenden SVG-Elemente gruppieren)selectAll(“g”)
alle ggf. bereits vorhandenen g
-Elemente auswählen.data(data)
daran anbinden.enter()
: neue Datensätze in den Daten werden zu ggf. bestehenden Daten hinzugefügtg
-Element erstellt.data(data).enter()
wird für jeden Datensatz erstellt.attr(“fill”, “black”)
function(d) { return d.[Spaltenbezeichnung]; }
verwendetd
den aktuellen Datensatz bereit; mit d.[Spaltenbezeichnung]
wird auf die Spalte zugegriffen (z.B. mit d.frequency
auf einen Frequenzwert des Datensatzes)var places = svg.selectAll("g") .data(data) .enter() .append("g") .attr("id", function(d) { return "id"+ d.id; }) var marker = places.append("circle") .attr("cx", function(d) { return d.x; }) .attr("cy", function(d) { return d.y; }) .attr("r", function(d) { return (1/d.frequency)*20; }) .attr("fill", "black");
Im Beispiel oben wird also für jeden Datensatz Folgendes erstellt:
<g id="[id]"> <circle cx="[x-Position]" cy="[y-Position]" r="[Radius]" fill="black"></circle> </g>
projection
übergebenvar places = svg.selectAll("g") .data(data) .enter() .append("g") .attr("id", function(d) { return "id"+ d.id; }) var marker = places.append("circle") .attr("cx", function(d) { return projection([d.lon, d.lat])[0]; }) .attr("cy", function(d) { return projection([d.lon, d.lat])[1]; }) .attr("r", function(d) { return (1/d.frequency)*20; }) .attr("fill", "black");