【问题标题】:Struggling to get a chart with modified JSON format努力获取修改后 JSON 格式的图表
【发布时间】:2014-12-29 14:07:53
【问题描述】:

我对 d3js 很陌生。我使用一个 json 文件做了一个条形图。它工作得很好。但是现在由于一些不可避免的原因,我改变了JSON文件格式。
我之前的json是:

[ 
    {"name":"bike","value":98},
    {"name":"car","value":52},
    {"name":"bus","value":20},
    {"name":"van","value":65} 
] 

代码是:

d3.json("sample.json", function(error, data) {
    x.domain(data.map(function(d) { return d.name; }));
    y.domain([0, d3.max(data, function(d) { return d.value; })]);

    var chart = d3.select("body")
        .append("svg")
        .attr("width", width + margin.left + margin.right)
        .attr("height", height + margin.top + margin.bottom)
        .append("g")
        .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

    chart.append("g")
        .attr("class", "x axis")
        .attr("transform", "translate(0," + height + ")")
        .call(xAxis);

    chart.append("g")
        .attr("class", "y axis")
        .call(yAxis);

    var bar = chart.selectAll(".bar")
        .data(data)
        .enter().append("g");

    bar.selectAll("rect")
        .data(data)
        .enter().append("rect")
        .attr("class", "bar")
        .attr("x", function(d) { return x(d.name); })
        .attr("y", function(d) { return y(d.value); })
        .attr("width", x.rangeBand())
        .attr("height", function(d) { return height - y(d.value); });
});

这是我的新 json 文件:

[ 
    {"category":"bike","bike":38,"car":0,"bus":0,"van":0},
    {"category":"car","bike":0,"car": 50,"bus":0,"van":0,},
    {"category":"bus","bike":0,"car": 0,"bus":14,"van":0},
    {"category":"van","bike":0,"car": 0,"bus":0,"van":43} 
]

我想要一张和上一张一样的图表。带有“0”(零)的数据不应出现在图表中。 请帮助我。在此先感谢:)

【问题讨论】:

  • 请注意:我会认真考虑调整您的“新”json 格式,因为其中包含大量冗余信息(或者说是非信息)
  • 是的,这是真的。我正在处理非常大的数据。我编写了一个通用脚本来获取 json 文件。这种格式支持我的其他 d3 代码(例如:分组条形图),除了这个。编写单独的脚本是额外的工作,这是不公平的。

标签: javascript json d3.js nvd3.js


【解决方案1】:

您没有提供新格式的解释,我不确定您以前的格式是如何工作的(考虑到x 属性设置),但调整到新格式应该很简单

.attr("x", function(d) { return x(d.category); })
.attr("y", function(d) { return y(d[d.category]); })

其他地方也有类似的变化。 (例如高度)

或者我错过了什么?

【讨论】:

  • 它不工作。我想知道如何从 json 获取特定的所需数据到我们的 d3 代码。例如:** [ {"name":"abc","score":43,"age":38,"match":20}, {"name":"rts","score":47," age":34,"match":15}, {"name":"xyz","score":56,"age":41,"match":17} ] ** 这里我只想要 name 分数 被采取。该怎么做??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多