【发布时间】:2020-08-19 12:25:41
【问题描述】:
我目前正在编写一些代码,用于水平轴上的堆叠条形图。但我不知道我们如何设置 .attr(x, ...) 以确保输入的每个矩形都位于条的末尾,从而填满空间。你能帮忙吗?
const bars = d3.select('#bars').append('svg').attr('width', 800).attr('height', 200);
d3.json('HHPro.json').then(data => {
var bar1Data = [{
position: 1,
label: '70k',
value: data.lemon.HH_Income.seventyK //1000
},
{
position: 2,
label: '71K - 149K',
value: data.lemon.HH_Income.seventyoneK_onefortynineK // 800
},
];
//sort bars based on value
bar1Data = bar1Data.sort(function(a, b) {
return d3.descending(a.value, b.value);
})
console.log(d3.sum(bar1Data, d => d.value))
var colorScale = d3.scaleOrdinal()
.range(["#E8A82B", "#000000"]);
const x = d3.scaleLinear()
.domain([0, d3.sum(bar1Data, d => d.value)])
.range([0, 800]);
y = d3.scaleLinear()
.domain([0, d3.max(bar1Data).value])
.rangeRound([200])
//Join data to rects
const rects = bars.selectAll('rect')
.data(bar1Data)
rects
.attr('width', (bar1Data) => {
return x(bar1Data.value)
})
.attr('height', 100)
.attr('x', 20)
.attr('y', 20)
rects.enter()
.append('rect')
.attr('width', (bar1Data) => {
return x(bar1Data.value)
})
.attr('height', 200)
.attr('x', 0) //BUT WHAT IS THIS??
.attr('y', 100)
.style("fill", (d, i) => colorScale(i));
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<div id="bars"></div>
【问题讨论】:
标签: d3.js