【发布时间】:2019-06-15 13:15:06
【问题描述】:
我想创建一个显示二氧化碳排放量的条形图。
问题(见下图):
为什么这些条被“推”到右边?为什么 x 轴显示的年份没有第一个整数?
我使用的是 d3 版本 3。
给定一些像这样的 JSON 数据:
[
{
"Cement": 0.0,
"Gas Flaring": 0.0,
"Gas Fuel": 0.0,
"Liquid Fuel": 0.0,
"Per Capita": null,
"Solid Fuel": 3.0,
"Total": 3.0,
"Year": 1751
},
and so on…
]
为了准备缩放,我做了:
var minDate = dataset[0].Year;
var maxDate = dataset[dataset.length - 1].Year;
var maxValue = d3.max(dataset, function(d) {
return d["Per Capita"];
});
我添加了 svg
var svg = d3
.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
我已将 xAxis 和 yAxis 分开:
var xAxisScale = d3.time
.scale()
.domain([minDate, maxDate])
.range([0, w]);
var yAxisScale = d3.scale
.linear()
.domain([0, maxValue])
.range([h, 0]);
我终于建立了这些轴……
var xAxis = d3.svg
.axis()
.scale(xAxisScale)
.orient("bottom");
var yAxis = d3.svg
.axis()
.scale(yAxisScale)
.orient("left");
svg
.append("g")
.attr("class", "axis")
.attr("transform", "translate(92," + (h - padding) + ")")
.call(xAxis);
svg
.append("g")
.attr("class", "axis")
.attr("transform", "translate(" + padding + ",-90)")
.call(yAxis);
我还添加了矩形......
svg
.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.style("fill", "teal")
.attr({
x: function(d, i) {
return i * (w / dataset.length);
},
y: function(d) {
return yAxisScale(d["Per Capita"]);
},
width: w / dataset.length,
height: function(d) {
return h - yAxisScale(d["Per Capita"]);
}
});
您能详细说明发生了什么问题吗?
为什么这些条被“推”到右边? 为什么 x 轴显示的年份没有第一个整数?
我使用的是 d3 版本 3。
非常感谢!
【问题讨论】: