D3:无效属性[object Object]

时间:2013-02-11 05:21:22

标签: javascript svg d3.js

我有以下结构的JSON列表:

[
    {'uid': 4, 'x': -1.2354657, 'y': -0.992893}
    {'uid': 26, 'x': 0.2783682, 'y': -0.1931}
    ...
    {'uid': 26, 'x': -0.278356, 'y': 0.082983}
]

我正在尝试将svg:circle元素附加到此列表中svgx值指定的点y。 AJAX请求正常工作,但我一直收到Error: Invalid value for <circle> attribute cy="[object Object]"

相关的javascript代码:

var svg = d3.select('#d3')
        .append('svg')
        .append('g')
            .attr('class', 'main')

    ...

var x = d3.scale.linear()
        .domain(d3.extent(data, function (d) {return d.x;}))
        .range([0, width]);

var y = d3.scale.linear()
        .domain(d3.extent(data, function (d) {return d.y;}))
        .range([height, 0]);
    ...

 svg.selectAll('.bloom')
        .data(data)
    .enter()
    .append('g')
        .attr('class', 'bloom')
    .append('circle')
        .attr('class', 'bloom-circle')
        .attr('cx', function (d) {return x(d.x);})
        .attr('cy', function (d) {return y(d.y);})
        .attr('r', 10)
        .style('fill', 'purple')
        .style('stroke', 'white')
        .style('stroke-width', '5px');

我完全不知道发生了什么,因为d3.scale.linear应始终在其range中返回一个值。有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

当范围未明确指定时,比例将返回空对象。例如,以下标度在为任何值调用时都将返回{}

d3.scale.linear.domain([0, 1]).range([0, undefined])
d3.scale.linear.domain([0, 1]).range([0, NaN])

因此,执行时是否heightwidth定义良好?