[英]Add a label to the bars in a vertical bar chart in D3 and delete Y-axis
我的问题是我想删除Y轴,而是将Y值作为标签放置在条形之外。 我该怎么做呢? 注意我将Y轴设置为40,因为我计划在右边添加另一个图,并需要它们使Y轴处于相同比例。 另外,如何减小条形的宽度。 我不要他们碰 我希望各条之间有空白。
这是我要修复的各种基本图形的以下数据和代码
var data = {
"age": ["25-29", "30-34", "35-39", "40-44", "45-50"],
"value": [28, 15, 11, 10, 8]
}
draw(data);
function draw(data) {
var margin = {
"top": 10,
"right": 10,
"bottom": 30,
"left": 50
},
width = 700,
height = 300;
var x = d3.scale.ordinal()
.domain(data.age.map(function(d) {
return d.substring(0, 5);}))
.rangeRoundBands([0, width], 0);
var y = d3.scale.linear()
.domain([0, 40/*d3.max(data.value)*/])
.range([height, 0]);
var xAxis = d3.svg.axis().scale(x).orient("bottom");
var yAxis = d3.svg.axis().scale(y).orient("left");
var svgContainer = d3.select("#root").append("svg")
.attr("class", "chart")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom).append("g")
.attr("transform", "translate(" + margin.left + "," + margin.right + ")");
svgContainer.append("g")
.attr("class", "x axis")
.attr("transform", "translate( 0," + height + ")")
.call(xAxis);
svgContainer.append("g")
.attr("class", "y axis").call(yAxis)
.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end");
svgContainer.selectAll(".bar").data(data.value).enter().append("rect")
.attr("class", "bar")
.attr("x", function(d, i) {
return i * x.rangeBand();
})
.attr("y", function(d) {
return y(d);
})
.attr("width", function(){
return x.rangeBand();
})
.attr("height", function(d) {
return height -y(d);
});
}
如果不想显示y轴,则无需创建。
对于文本标签,可以这样创建它们:
svg.selectAll(".label")
.data(data)
.enter().append("svg:text")
.attr("class", "label")
.attr("x", function(d) {
return x(d[X_AXIS_COLUMN]) + x.rangeBand() / 3;
})
.attr("y", function(d) {
return y(d[Y_AXIS_COLUMN]) - 5;
})
.text(function(d) {
return Y_DATA_FORMAT(d[Y_AXIS_COLUMN]);
});
这是我的示例:
http://vida.io/documents/bYRhZDRS7MGrArSjC
对于您的第二个问题,请玩此积木到您想要的位置:
var x = d3.scale.ordinal()
.rangeRoundBands([0, width], 0.1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.