Javascript d3v4为什么我的行元素没有出现?
我正在制作一组简单的方框图,但由于某些原因,线条元素没有显示出来 代码是:Javascript d3v4为什么我的行元素没有出现?,javascript,d3.js,graph,data-visualization,Javascript,D3.js,Graph,Data Visualization,我正在制作一组简单的方框图,但由于某些原因,线条元素没有显示出来 代码是: var margin = { top: 10, right: 30, bottom: 30, left: 40 }, width = 900 - margin.left - margin.right, height = 400 - margin.top - margin.bottom; var svgBox = d3.sele
var margin = {
top: 10,
right: 30,
bottom: 30,
left: 40
},
width = 900 - margin.left - margin.right,
height = 400 - margin.top - margin.bottom;
var svgBox = 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 + ")");
var yScale = d3.scaleLinear()
.range([height, 0]);
var xScale = d3.scaleBand()
.rangeRound([0, width])
.paddingInner(0.05)
.align(0.1);
var center = 200
var width = 100
d3.csv("boxPlotData.csv", function(dataset) {
var max = d3.max(dataset, function(d) {
return +d.max;
});
yScale.domain([0, max])
xScale.domain(dataset.map(function(d) {
return d.borough;
}));
svgBox.append("g").call(d3.axisLeft(yScale));
svgBox.append("g").attr("transform", "translate(0," + height + ")").call(d3.axisBottom(xScale));
svgBox.selectAll("line").data(dataset).enter()
.append("line")
.attr("x1", d => xScale(d.borough) + width / 3.5)
.attr("x2", d => xScale(d.borough) + width / 3.5)
.attr("y1", d => yScale(+d.min))
.attr("y2", d => yScale(+d.max))
.attr("stroke", "black");
svgBox.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.attr("x", d => xScale(d.borough) + width / 3.5)
.attr("y", d => yScale(+d.q3))
.attr("height", d => (yScale(+d.q1) - yScale(+d.q3)))
.attr("width", width)
.attr("stroke", "black")
.style("fill", "#69b3a2");
});
我的数据是这样的
代码按预期输入“rect”元素,但线条组件没有显示在html中的任何位置?问题是您不能只使用
svgBox。选择All(“线条”)
,因为它将选择轴记号和轴线。相反,我建议使用attr(“class”,“line”)
向行中添加一个类,并使用svgBox.selectAll(“.line”)
专门选择要追加的行
因此,行追加代码段应该是:
svgBox.selectAll(".line")
.data(dataset)
.enter()
.append("line")
.attr("class", "line")
.attr("x1", d => xScale(d.borough) + width / 3.5)
.attr("x2", d => xScale(d.borough) + width / 3.5)
.attr("y1", d => yScale(+d.min))
.attr("y2", d => yScale(+d.max))
.attr("stroke", "black");
下面是工作代码段:我确实选择了All,但在询问问题时忘记将其放回代码中(正在擦除和修改它以尝试使其工作)。selectAll的结果相同