我打算按照this教程使用d3.v3.js制作气泡图:
从mydata.json
文件加载json数据时,图表绘制得很好,但是从url加载相同的json时出现错误:
var JSON_URL = "http://127.0.0.1:8080";
//This works fine:
//var JSON_URL = "/assets/mydata.json";
var width = 800,
height = 600;
var canvas = d3.select("#bubble").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(50,50)");
var pack = d3.layout.pack()
.size(width, height-50)
.padding(10)
d3.json(JSON_URL, function(data) {
console.log('server data is:', data);
//server data is: {"name":"animal","children":[{"name":"cat","value":4},{"name":"dog","value":5},{"name":"fish","value":10}]}
var nodes = pack.nodes(data);
var node = canvas.selectAll(".node")
.data(nodes)
.enter()
.append("g")
.attr("class", "node")
.attr("transform", function (d) { return "translate(" + d.x + ","+ d.y + ")" ;});
node.append("circle")
.attr("r", function(d) {return d.r; })
.attr("fill", "steelblue")
.attr("opacity", 0.25)
.attr("stroke", "steelblue" )
.attr("stroke-width", "2");
node.append("text")
.text(function(d) {return d.children ? "" : d.name ;})
})
/assets/mydata.json
中的json数据:
{
"name" : "animals",
"children" : [
{"name":"dog", "value": 5},
{"name":"cat", "value": 4},
{"name":"fish", "value": 10}
]
}
我得到的错误:
Error: <g> attribute transform: Expected number, "translate(undefined,undefi…".
我该如何解决?
答案 0 :(得分:1)
由于d.x
和d.y
为undefined
,因此您收到此错误。这意味着您没有正确导入D3模板。
在导入JSON文件之前,您需要从D3库导入布局:
var pack = d3.layout.pack()
.size([width, height - 50]) // <- size
请注意,size
方法将数组作为第一个参数:[width, height]
:
force.size([width, height])
如果指定了大小,则将可用的布局大小设置为指定的表示x和y的两元素数字数组。 如果未指定大小,则返回当前大小,默认为
[1, 1]
。
关于JSON文件的问题:
在声明nodes
之前使用以下行:
data = (typeof data == "string") ? JSON.parse(data) : data;
根据需要将JSON字符串解析为JavaScript对象。