Public
Edited
Mar 5, 2023
Insert cell
chart= {
const svg = d3.select("body").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 + ")");

const g= svg
.append("g")
.attr("class", "gDrawing")
.attr("transform", `translate( ${margin.left}, ${margin.top})`);
g.append("g")
.selectAll(".bar")
.data(stackedData)
.enter().append("g")
.attr("class", "bar")
.attr("fill", function(d) { return color(d.key); });

g.append("g")
.selectAll("rect")
.data(function(d) { return d; })
.enter().append("rect")
.attr("x", function(d) { return x(d.data.name); })
.attr("y", function(d) { return y(d[1]); })
.attr("height", function(d) { return y(d[0]) - y(d[1]); })
.attr("width", x.bandwidth());

return svg.node();
}
Insert cell
color= d3.scaleOrdinal( d3.schemePastel1)
// .domain(data_1.map( d=> d[colorAttr]))
Insert cell
x.domain(data.map(function(d) { return d.name; }));
Insert cell
y.domain([0, d3.max(stackedData, function(d) { return d3.max(d, function(d) { return d[1]; }); })]).nice();
Insert cell
keys = Object.keys(data[0]).slice(1);
Insert cell
stackedData = d3.stack()
.keys(keys)(data);
Insert cell
yAxis = d3.axisLeft(y)
.ticks(10, "%");
Insert cell
xAxis = d3.axisBottom(x);
Insert cell
y = d3.scaleLinear()
.range([height, 0])
Insert cell
x = d3.scaleBand()
.range([0, width])
.padding(0.1);
Insert cell
margin = ({top: 20,
right: 20,
bottom: 30,
left: 40
})
Insert cell
height = 500 - margin.top - margin.bottom;
Insert cell
width = 960 - margin.left - margin.right
Insert cell
data = [
{name: 'A', segment1: 10, segment2: 20, segment3: 30},
{name: 'B', segment1: 20, segment2: 30, segment3: 10},
{name: 'C', segment1: 30, segment2: 10, segment3: 20},
]
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more