2016-05-09 9 views
0

Wie kann ich dieses Beispiel ändern, um von einem JSON-Array anstelle von CSV-Datei zu lesen? Ich werde eine statische JSON-Zeichenfolge haben, die ich lieber als "Daten" anstatt als CSV verwenden möchte. Alle Hinweise werden sehr geschätzt.Ändern d3.js Donut-Diagramm zum Lesen von JSON-Array

var width = 960, 
height = 500, 
radius = Math.min(width, height)/2; 

var color = d3.scale.ordinal() 
.range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]); 

var arc = d3.svg.arc() 
.outerRadius(radius - 10) 
.innerRadius(radius - 70); 

var pie = d3.layout.pie() 
.sort(null) 
.value(function(d) { return d.population; }); 

var svg = d3.select("body").append("svg") 
.attr("width", width) 
.attr("height", height) 
.append("g") 
.attr("transform", "translate(" + width/2 + "," + height/2 + ")"); 

d3.csv("data.csv", type, function(error, data) { 
if (error) throw error; 

var g = svg.selectAll(".arc") 
    .data(pie(data)) 
.enter().append("g") 
    .attr("class", "arc"); 

g.append("path") 
    .attr("d", arc) 
    .style("fill", function(d) { return color(d.data.age); }); 

g.append("text") 
    .attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; }) 
    .attr("dy", ".35em") 
    .text(function(d) { return d.data.age; }); 
}); 

function type(d) { 
d.population = +d.population; 
return d; 
} 

Beispiel JSON Daten:

[ 
{ 
"age": "<5", 
"population": 2704659 
}, 
{ 
"age": "5-13", 
"population": 4499890 
}, 
{ 
"age": "14-17", 
"population": 2159981 
}, 
{ 
"age": "18-24", 
"population": 3853788 
}, 
{ 
"age": "25-44", 
"population": 14106543 
}, 
{ 
"age": "45-64", 
"population": 8819342 
}, 
{ 
"age": "≥65", 
"population": 612463 
} 
] 

Dies ist ein Beispiel aus der folgenden Verbindung. Hier ist mehr auf d3 requestsOriginal Example

Antwort

2

Nicht eine ganze Menge ändert sich, wirklich. Am Beispiel Sie gab definieren nur var data genannt und weisen Sie Ihre JSON-Daten Beispiel:

var data = [ 
{ 
    "age": "<5", 
    "population": 2704659 
}, 
{ 
    "age": "5-13", 
    "population": 4499890 
}, 
...etc 

Dann blockieren oder die d3.csv() Zeile in Zeile # entfernen 53. Und alles funktioniert gut.

Hier ist eine Geige für Sie: https://jsfiddle.net/ej2s217f/

0

Gerade d3.json

var data; // a global 

d3.json("path/to/file.json", function(error, json) { 
    if (error) return console.warn(error); 
    data = json; 
    visualizeit(); 
}); 

verwenden.

bearbeiten

Wenn Sie nicht wollen, eine externe json hier laden ist ein jsfiddle

Alles, was Sie tun müssen, ist die d3.json Anruf fallen und erklären die var data = [...]

Im Grunde, was bleibt ist:

var width = 960, 
     height = 500, 
     radius = Math.min(width, height)/2; 

    var color = d3.scale.ordinal() 
     .range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]); 

    var arc = d3.svg.arc() 
     .outerRadius(radius - 10) 
     .innerRadius(radius - 70); 

    var pie = d3.layout.pie() 
     .sort(null) 
     .value(function (d) { 
      return d.population; 
     }); 

    var svg = d3.select("body").append("svg") 
     .attr("width", width) 
     .attr("height", height) 
     .append("g") 
     .attr("transform", "translate(" + width/2 + "," + height/2 + ")"); 

    data = [ 
     { 
      "age": "<5", 
      "population": 2704659 
     }, 
     { 
      "age": "5-13", 
      "population": 4499890 
     }, 
     { 
      "age": "14-17", 
      "population": 2159981 
     }, 
     { 
      "age": "18-24", 
      "population": 3853788 
     }, 
     { 
      "age": "25-44", 
      "population": 14106543 
     }, 
     { 
      "age": "45-64", 
      "population": 8819342 
     }, 
     { 
      "age": "≥65", 
      "population": 612463 
     } 
    ]; 

    var g = svg.selectAll(".arc") 
     .data(pie(data)) 
     .enter().append("g") 
     .attr("class", "arc"); 

    g.append("path") 
     .attr("d", arc) 
     .style("fill", function (d) { 
      return color(d.data.age); 
     }); 

    g.append("text") 
     .attr("transform", function (d) { 
      return "translate(" + arc.centroid(d) + ")"; 
     }) 
     .attr("dy", ".35em") 
     .text(function (d) { 
      return d.data.age; 
     }); 

    function type(d) { 
     d.population = +d.population; 
     return d; 
    } 
+0

ich nicht lokal meine Datei speichere. Ich werde ein JSON-Array wie oben definiert haben. Also var data = [{"Alter": "<5", "Bevölkerung": "1211"}] usw. – konrad

+1

@konrad hier gehst du :) – aifrim