【问题标题】:d not being set with expected informationd 未设置预期信息
【发布时间】:2014-11-19 13:47:18
【问题描述】:

我正在尝试用 d3 绘制一个简单的 svg 饼图。

下面是生成饼图和数据集的代码:

/* data */
var pieLayout = d3.layout.pie();
var pieData = pieLayout([21, 32, 35, 64, 83]);
/* generator */
var pieGenerator = d3.svg.arc()
                     .innerRadius(20)
                     .outerRadius(50)
                     .startAngle( function(d){ 
                        console.log(d) 
                        return d.startAngle }
                      )
                     .endAngle( function(d){ 
                        console.log(d)
                        return d.endAngle
                      });
/* usage */
svg.append('path').data(pieData).attr('d', pieGenerator)

无论出于何种原因,我只显示了我的饼图的一部分。这是为什么呢?

看到.startAngle 函数和.endAngle 函数中的那些console.logs 了吗?他们只是在pieData 中记录第一个对象:

Object {data: 21, value: 21, startAngle: 5.721709173346517, endAngle: 6.283185307179587} (index):189
Object {data: 21, value: 21, startAngle: 5.721709173346517, endAngle: 6.283185307179587}

如何让它遍历pieData 中的所有对象,而不仅仅是第一个?

我尝试使用datum 而不是data,但这只是使每个循环的d 等于pieData。这是反映使用数据的console.log:

[Object, Object, Object, Object, Object]
[Object, Object, Object, Object, Object]
Error: Invalid value for <path> attribute d="MNaN,NaNA50,50 0 1,1 NaN,NaNLNaN,NaNA20,20 0 1,0 NaN,NaNZ" 

【问题讨论】:

    标签: svg d3.js


    【解决方案1】:

    您没有正确使用 D3 选择...数据模式。您只是附加一个元素并将数据绑定到它而不是

    svg.selectAll("path").data(pieData)
       .enter().append('path').attr('d', pieGenerator)
    

    参见例如this tutorial 了解有关一般模式的更多信息。

    【讨论】:

    • 太棒了!不过感觉有点奇怪,选择一个不存在的路径,给这个不存在的选择器数据,输入它,然后才附加路径......无论如何,现在可以工作了,谢谢
    猜你喜欢
    • 2021-04-07
    • 1970-01-01
    • 2013-10-12
    • 2018-02-24
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多