我有一个饼图,我想为标签添加百分比。这是饼图的jsfiddle,代码如下。现在图表显示了实际值。我查看了dc.js Getting Started and How-To Guide这是仪表板的一个示例。它的图表中有百分比。但是,当我尝试复制结构时,我收到一个错误。例如,当我使用像这样的标签函数时
.label(function(d) {if(all.value){return d.key + " " + d.value / all.value();}
.renderLabel(true)
在控制台中,它说所有都没有定义。此外,d.key
也不会返回任何内容。我想我的数据有不同的结构。帮助赞赏。感谢。
HTML
<body>
<div id='Chart'>
</div>
</body>
JS
var ndx = crossfilter(data);
var XDimension = ndx.dimension(function (d) {
return d.Category;
});
var YDimension = XDimension.group();
dc.pieChart("#Chart")
.width(480).height(300)
.dimension(XDimension)
.group(YDimension)
.label(function(d){return d.value});
dc.renderAll();
数据
var data = [{
Category: "A",
ID: "1"
}, {
Category: "A",
ID: "1"
}, {
Category: "A",
ID: "1"
}, {
Category: "A",
ID: "2"
}, {
Category: "A",
ID: "2"
}, {
Category: "B",
ID: "1"
}, {
Category: "B",
ID: "1"
}, {
Category: "B",
ID: "1"
}, {
Category: "B",
ID: "2"
}, {
Category: "B",
ID: "3"
}, {
Category: "B",
ID: "3"
}, {
Category: "B",
ID: "3"
}, {
Category: "B",
ID: "4"
}, {
Category: "C",
ID: "1"
}, {
Category: "C",
ID: "2"
}, {
Category: "C",
ID: "3"
}, {
Category: "C",
ID: "4"
}, {
Category: "C",
ID: "4"
},{
Category: "C",
ID: "5"
}];
答案 0 :(得分:9)
你很亲密!在这种情况下,我建议做类似以下的事情:
.label(function(d) {
console.log(JSON.stringify(d));
})
了解数据结构。如果您这样做,您会发现key
和value
位于d.data
下,因此您可以拥有类似
.label(function(d) {
return d.data.key + ' ' + d.data.value + '%';
})
如果您只想计算所显示圈子的分数,可以使用startAngle
和endAngle
属性。
.label(function(d) {
return d.data.key + ' ' + Math.round((d.endAngle - d.startAngle) / Math.PI * 50) + '%';
});
(d.endAngle - d.startAngle)
将为您提供切片显示的弧度数,因此您可以通过除以圆圈中的弧度数来计算其中的百分比。
答案 1 :(得分:0)
确实,它没有d.data。相反,我使用.renderlet(): :
.renderlet(function(chart){
chart.selectAll('text.pie-slice').text( function(d) {
return d.data.key + ' ' + dc.utils.printSingleValue((d.endAngle - d.startAngle) / (2*Math.PI) * 100) + '%';
})
})
答案 2 :(得分:0)
.label
是修改饼图的正确方法有bug,
通过登录d
.label(d => {
console.log(d);
// {
// key: 'which you return in dimension',
// value: 'ex: 259.91'
// }
})
Ex,阵列中有6个obj,但是日志可能只有3个或4个@@ 解决这个错误
.on('pretransition', function(chart){
chart.selectAll('text.pie-slice').text(d => {
console.log(d);
// {
// data: {
// key: 'which you return in dimension',
// value: 'ex: 259.91'
// },
// endAngle: 'xxx',
// startAngle: 'yyy'
// }
})
})
通过这种方式,我们可以在数组中记录足够的6个obj
标签文本是text(d => {})
chart.selectAll('text.pie-slice').text(function(d){
let label = d.data.key;
return label + ': ' + Number(d.data.value).toFixed(2);
})
//Or play with percentage
chart.selectAll('text.pie-slice').text(function(d){
return d.data.key + ' ' + dc.utils.printSingleValue((d.endAngle - d.startAngle) / (2*Math.PI) * 100) + '%';
})