我目前仍然坚持如何遍历JSON结构(我创建)以创建并排的圆环图。我想我已经创建了一个糟糕的结构,但我会很感激任何建议。
我在Mike Bostock的例子中工作:http://bl.ocks.org/mbostock/1305337使用.csv文件作为源数据。
在该示例中,他使用d3.nest()创建一个带有航班起源数组的嵌套数据结构。
var airports = d3.nest()
.key(function(d) { return d.origin; })
.entries(flights);
然后,他能够将新数据结构绑定到新的div选择器:
var svg = d3.select("body").selectAll("div")
.data(airports)
.enter().append("div")
这允许他为每个航班起源创建圆环图。
我的JSON数据如下所示:
{"years": [
{
"year": 2015,
"type": "bestSellers",
"chartOne": [
{
"label": "smarties",
"value": 11
},
{
"label": "nerds",
"value": 13
},
{
"label": "dots",
"value": 16
},
{
"label": "sour patch kids",
"value": 61
}
],
"chartTwo": [
{
"label": "Pepsi",
"value": 36
},
{
"label": "sunkist",
"value": 13
},
{
"label": "coke",
"value": 34
}
]}
我是一名CS学生,对数据结构最佳实践和d3.js缺乏经验。我创建的结构看起来并不“平坦”,所以我不确定是否需要使用d3.nest()。但是,我不清楚如何遍历chartOne和chartTwo使用结构。
我可以访问图表中的数组: var chartOne = years [0] .chartOne; var cartTwo = years [0] .chartTwo;
但我希望能够有一个对象来访问chart1和chart2。我很想在我的JSON中创建另一个数组块,但不清楚是否有更简单的方法。
答案 0 :(得分:1)
不,你不需要在这里使用.nest
。构建所需数据结构的最简单方法是建议(d3
总是希望数组迭代):
var nestedData = [ years[0].chartOne, years[0].chartTwo ];
之后,它就像清理数据的访问者功能一样简单,而Bostock的示例效果很好。
示例here。