Я хочу изменить basic side bar chart как стекную гистограмму, которая будет отражать частичную сумму: общее соотношение. Я уже создал matrix
со следующим:Создать диаграмму стека D3 с включенными значениями
[{y:0, x0:221, x1:1670},
{y:1, x0:581, x1:1473},
{y:2, x0:2485, x1:2643},
{y:3, x0:135, x1:8714},
{y:4, x0:31, x1:211}]
Для справки, в каждом случае истинная общая сумма составит x0
+ x1
.
У меня есть обычная гистограмма для итогов, но я не могу понять, как ее преобразовать в сложную диаграмму. Кроме того, если есть способ сделать это без мутации данных (вычитая x0
от истинного итога, чтобы получить x1
), это также было бы идеальным.
Существующие BarChart
// Constants
var width = 450,
barHeight = 20,
height = 300,
padding = 10,
leftMargin = 10;
var typeBarChart = d3.select('.typeBarChart')
.attr('width', width)
.attr('height', barHeight*dataGroupByType.length); // dataGroupByType is a D3 nest data series with length is 5
// X-axis;
var x = d3.scale.linear()
.domain([0, maxCrime]) // maxCrime determine elsewhere, approx. 8850
.range([0, width]);
var chart = d3.select(".typeBarChart")
.attr("width", width)
.attr("height", barHeight * dataGroupByType.length);
var bar = chart.selectAll("g")
.data(dataGroupByType)
.enter()
.append("g")
.attr("transform", function(d, i) { return "translate(0," + i * barHeight + ")"; });
bar.append("rect")
.attr("width", function(d) { return x(d.values); })
.attr("height", barHeight - 1);
bar.append("text")
.attr("x", function(d) {
if (d.values < 1000) {
return x(d.values) + 20;
} else {
return x(d.values) - 3;
}
})
.attr("y", barHeight/2)
.attr("dy", ".35em")
.text(function(d) { return d.values; });
Привет Таран, мне нравится ваше решение укладывать меньшие прямоугольники на вершине большего. Спасибо! Боковой вопрос: можно ли добавить переход к множеству красных прямоугольников, чтобы они заполнили немного таланта? – Kwhitejr
эй, попробуйте использовать .transition(). Продолжительность (время) на красных прямоугольниках. имеют начальную ширину как 0 и конечную ширину, как указано выше –