[英]Using JSON data in D3 Javascript visualisation
我正在使用 JSON 数据来驱动使用 javascript D3 可视化工具制作的一些图表 (http://mbostock.github.com/d3/)。 我已经设置了我的 WCF 服务,并且 Jquery 中的代码可以正常工作:
$('#getDataItems').click(function () {
var $DataList = $('#DataList');
$DataList.empty().appendLi('Loading...');
// Get the JsonP data
$.getJSON('http://localhost:65025/CustomersService.svc/GetMyDataItems?callback=?', null, function (somedata) {
alert('Received ' + somedata.length + ' Items');
$DataList.empty();
$.each(somedata, function () {
$DataList.appendLi(this.ID + " - " + this.Value);
}); // end each dataitem function
}); // end success function
}); // end #getDataItems.click
D3 也有一个 function 用于使用 JSON 数据,但我还没有成功。 它看起来像这样:
// this works
//var data = [4, 8, 15, 16, 23, 42];
// this doesn't
var data = function () {
d3.json('http://localhost:65025/CustomersService.svc/GetMyDataItems?callback=?',
function (data) } })
}
//.. rest of the example is known working code so its here only for reference
// create the chart class as an append to the body element.
var chart = d3.select("body")
.append("svg:svg")
.attr("class", "chart")
.attr("width", 420)
.attr("height", 20 * data.length);
// Set the width relative to max data value
var x = d3.scale.linear()
.domain([0, d3.max(data)])
.range([0, 420]);
var y = d3.scale.ordinal()
.domain(data)
.rangeBands([0, 120]);
chart.selectAll("rect")
.data(data)
.enter().append("svg:rect")
.attr("y", y)
.attr("width", x)
.attr("height", y.rangeBand());
chart.selectAll("text")
.data(data)
.enter().append("svg:text")
.attr("x", x)
.attr("y", function (d) { return y(d) + y.rangeBand() / 2; })
.attr("dx", -3) // padding-right
.attr("dy", ".35em") // vertical-align: middle
.attr("text-anchor", "end") // text-align: right
.text(String);
几乎所有代码都来自 D3 下载中的“条形图”示例,运行良好。 如果我手动声明数据(根据上面的整数数组)它可以工作,但不能使用 JSON 命令。 我还简化了返回的数据,使其仅包含整数。 但最终,我希望能够使用“id 字段”、“值字段”等访问 JSON 数据并在代码中引用这些数据。
有人对我的语法是否不正确有任何想法吗? 我意识到 function (数据)旨在用于向图表添加数据,但此示例中的代码有效,因此我更愿意从这一点开始。
D3 有自己的 json 获得 function 以确保框架的完整性,但您不必使用它。 您可以使用 jQuery $.getJSON
尝试您的 d3 图表,它应该可以工作。 这就是我所做的,因为我的大部分开发都是使用 jQuery 完成的。
至于您的示例, d3.json
语义与$.getJSON
。 它是异步调用,其中 function 在检索到数据后被调用。 尝试这样的事情:
d3.json(
'http://localhost:65025/CustomersService.svc/GetMyDataItems?callback=?',
function (jsondata) {
// create the chart here with
// the returned data
console.log(jsondata);
var data = jsondata.map(function(d) { return d.Value; });
console.log(data);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.