我是d3 js的新手。
我想创建一个简单的条形图,带有带星号的显着条,如下所示。
我该怎么做呢?显然,我可以根据文档中的示例制作正常的条形图,但我特别是在条形图/星号上不足。
由于
答案 0 :(得分:0)
对于这个自定义的东西,我只想自己绘制paths
。例如,我把它放在一起大约15分钟。请注意,我捏造了误差条计算,并假设第一个柱是最高的。
svg.selectAll(".errorBar")
.data(data)
.enter()
.append("path")
.attr("d", function(d, i) {
var rV = "";
if (i === 0) {
rV += "M" + (x(d.letter) + x.rangeBand() * 0.5) + " " + y(d.value);
rV += "L" + (x(d.letter) + x.rangeBand() * 0.5) + " " + (y(firstValue.value) - ((data.length - 1) * 25));
return rV;
}
var errorY = (y(d.value) - y(d.value) / 6);
rV += "M" + (x(d.letter) + x.rangeBand() * 0.5) + " " + y(d.value);
rV += "L" + (x(d.letter) + x.rangeBand() * 0.5) + " " + errorY;
rV += "M" + (x(d.letter) + x.rangeBand() * 0.25) + " " + errorY;
rV += "L" + (x(d.letter) + x.rangeBand() * 0.75) + " " + errorY;
rV += "M" + (x(d.letter) + x.rangeBand() * 0.5) + " " + (errorY - 10);
rV += "L" + (x(d.letter) + x.rangeBand() * 0.5) + " " + (y(firstValue.value) - (i * 25));
rV += "M" + (x(firstValue.letter) + x.rangeBand() * 0.5) + " " + (y(firstValue.value) - (i * 25));
rV += "L" + (x(d.letter) + x.rangeBand() * 0.5) + " " + (y(firstValue.value) - (i * 25));
return rV;
})
.attr("stroke", "black")
.attr("stroke-width", 2)
svg.selectAll(".starText")
.data(data.filter(function(d,i){ return i > 0; }))
.enter()
.append('text')
.attr('dx',function(d,i){
return ((x(d.letter) + x.rangeBand()) / 2);
})
.attr('y', function(d,i){
return y(firstValue.value) - ((i+1) * 25);
})
.style('text-anchor', 'start')
.text('****')
示例here。
看起来像: