gpt4 book ai didi

javascript - 在条形图中的条形顶部显示值

转载 作者:数据小太阳 更新时间:2023-10-29 04:00:58 26 4
gpt4 key购买 nike

我有一个条形图,其 x 轴为序号刻度。我想在每个条形的顶部或每个条形的底部显示 y 值。当鼠标悬停在条上时显示 y 值也是可以接受的。 dc.js 中是否有函数或方法可以做到这一点?这是 jsfiddle我的代码在图片下方>

编辑:这是我的代码:HTML

<body>
<div id='Chart'>
</div>
</body>

JS

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"
}];

var ndx = crossfilter(data);

var XDimension = ndx.dimension(function (d) {
return d.Category;
});

var YDimension = XDimension.group().reduceCount(function (d) {
return d.value;
});


dc.barChart("#Chart")
.width(480).height(300)
.dimension(XDimension)
.group(YDimension)
.transitionDuration(500)
.xUnits(dc.units.ordinal)
.label(function(d) {return d.value})
.x(d3.scale.ordinal().domain(XDimension))

dc.renderAll();

最佳答案

检查更新jsfiddle

.renderlet(function(chart){

var barsData = [];
var bars = chart.selectAll('.bar').each(function(d) { barsData.push(d); });

//Remove old values (if found)
d3.select(bars[0][0].parentNode).select('#inline-labels').remove();
//Create group for labels
var gLabels = d3.select(bars[0][0].parentNode).append('g').attr('id','inline-labels');

for (var i = bars[0].length - 1; i >= 0; i--) {

var b = bars[0][i];
//Only create label if bar height is tall enough
if (+b.getAttribute('height') < 18) continue;

gLabels
.append("text")
.text(barsData[i].data.value)
.attr('x', +b.getAttribute('x') + (b.getAttribute('width')/2) )
.attr('y', +b.getAttribute('y') + 15)
.attr('text-anchor', 'middle')
.attr('fill', 'white');
}

})

如果您不希望重绘条形图时标签可见(例如,当用户过滤/单击其他图表后条形图发生变化),您可以将旧值的检查从 de renderlet 移动到 preRedraw。听众。

.on("preRedraw", function(chart){

//Remove old values (if found)
chart.select('#inline-labels').remove();

})

备选

D3-ish 方式

演示 jsfiddle

.renderlet(function (chart) {

//Check if labels exist
var gLabels = chart.select(".labels");
if (gLabels.empty()){
gLabels = chart.select(".chart-body").append('g').classed('labels', true);
}

var gLabelsData = gLabels.selectAll("text").data(chart.selectAll(".bar")[0]);

gLabelsData.exit().remove(); //Remove unused elements

gLabelsData.enter().append("text") //Add new elements

gLabelsData
.attr('text-anchor', 'middle')
.attr('fill', 'white')
.text(function(d){
return d3.select(d).data()[0].data.value
})
.attr('x', function(d){
return +d.getAttribute('x') + (d.getAttribute('width')/2);
})
.attr('y', function(d){ return +d.getAttribute('y') + 15; })
.attr('style', function(d){
if (+d.getAttribute('height') < 18) return "display:none";
});

})

关于javascript - 在条形图中的条形顶部显示值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25026010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com