【发布时间】:2021-09-20 09:37:38
【问题描述】:
我正在使用 D3js 进行这个项目,但现在遇到了一个问题。 当我有更多数据时,我的条形图的条将正确地附加在与名称相同的行中,但是当我从数据库中获取较少的数据时,条将“失去控制”并附加到高于它们的名称并导致错误的视图我的图表。
这是一张图片,如果我加载更多数据会得到什么。
如果我加载较少的数据,这是我的第二张图表。
我真的不明白我在这里缺少什么,但我相信是 Y 轴的高度和条 y 位置的东西。你能帮我解决这个问题吗?
这是我的代码:
var margin = { top: 20, right: 30, bottom: 40, left: 90 },
width = 360 - margin.left - margin.right,
height = 300 - margin.top - margin.bottom;
// append the svg object to the body of the page
var svg = d3.select("#my_dataviz")
.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 + ")");
// Parse the Data
var data2 = d3.json("/Events/BarChart/4").then(function (data) {
console.log(data);
// Add X axis
var x = d3.scaleLinear()
.domain([0, 5])
.range([0, width]);
svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x))
.selectAll("text")
.attr("transform", "translate(-10,0)rotate(-45)")
.style("text-anchor", "end")
;
// Y axis
var y = d3.scaleBand()
.range([0, height])
.domain(data.map(function (d) { return d.name; }))
svg.append("g")
.call(d3.axisLeft(y))
//Bars
svg.selectAll("myRect")
.data(data)
.enter()
.append("rect")
.attr("x", 4)
.attr("y", function (d) { return y(d.name) + 10; })
.attr("width", function (d) { return x(d.value); })
.attr("height", 20)
.attr("fill", function (d) {
if (d.value > 1) {
return "rgb(51, 80, 92)";
}
else if (d.value > 1 && d.value < 4) {
return "rgb(118, 161, 179)"
}
else {
return "rgb(171, 209, 224)";
}
})
})
【问题讨论】:
标签: d3.js charts data-visualization bar-chart