D3.js d3条形图轴对齐
我正在尝试使用中描述的边距约定 绘制条形图时。但是,正如您所看到的,这些条不会与x轴对齐 在此基本示例中:。我做错了什么D3.js d3条形图轴对齐,d3.js,D3.js,我正在尝试使用中描述的边距约定 绘制条形图时。但是,正如您所看到的,这些条不会与x轴对齐 在此基本示例中:。我做错了什么 var data = [ {x: "Differential Geometry", y: 10}, {x: "Statistical Physics", y: 5}, {x: "Music", y: 3} ] var margin = {top: 20, right: 10,
var data = [
{x: "Differential Geometry", y: 10},
{x: "Statistical Physics", y: 5},
{x: "Music", y: 3}
]
var margin = {top: 20, right: 10, bottom: 20, left: 50};
var width = 500 - margin.left - margin.right;
var height = 320 - margin.top - margin.bottom;
var y = d3.scale.linear()
.domain([0, d3.max(data, function(x) {
return x.y;
})])
.range([0, height]);
var x = d3.scale.ordinal()
.domain(_.map(data, function(d) { return d.x;}))
.rangeRoundBands([0, width], 0.10);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
var svg = d3.select("body")
.append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var rect = svg.selectAll("rect")
.data(data)
.enter()
.append("rect")
.attr("x", function(d) {
return x(d.x);
})
.attr("y", 0)
.attr("height", function(d) {
return y(d.y);
})
.attr("fill", function(d) { return "blue";})
.attr("width", 20);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
svg.append("g")
.attr("class", "y axis")
.attr("transform", "translate(0,0)")
.call(yAxis);
y
坐标从顶部开始计数(即0位于图像顶部)。如果将y
设置为总高度减去高度,则该选项应该有效
.attr("y", function(d) { return (height - y(d.y)); })
这是一个很好的观点。然而,在帖子中,我指的是x轴上的刻度对齐。哦,我明白了。在我看来,标签的位置是正确的,但条形图有点偏离——准确地说是x.rangeBand()/2。尝试将其添加到条的
x
值中。啊,我错过了填充。您还需要添加它,即函数(d,i){return x(d.x)+x.rangeBand()/2+(i+1)*0.1;}
。要扩展LAR答案,还需要考虑右边距.attr(“x”,函数(d,i){return x(d.x)+x.rangeBand()/2+(i+1)*0.01-margin.right;})