Published
Edited
Aug 12, 2021
1 star
Insert cell
Insert cell
penguins = FileAttachment("palmer-penguins.csv").csv({typed: true})
Insert cell
Insert cell
xExtent = d3.extent(penguins, d => d.bill_length)
Insert cell
yExtent = d3.extent(penguins, d => d.bill_depth)
Insert cell
Insert cell
xScale = d3.scaleLinear().domain(xExtent).range([10, 290])
Insert cell
yScale = d3.scaleLinear().domain(yExtent).range([290, 10])
Insert cell
{
const svg = d3.create("svg").attr("width", 300).attr("height", 300);
svg.selectAll("circle")
.data(penguins)
.join(enter => {
enter.append("circle")
.attr("r", 2)
.attr("fill", "black")
.attr("cx", d => xScale(d.bill_length))
.attr("cy", d => yScale(d.bill_depth))
});
return svg.node();
}
Insert cell
Insert cell
penguinCols
Insert cell
Insert cell
xColExtent = d3.extent(penguinCols.bill_length);
Insert cell
yColExtent = d3.extent(penguinCols.bill_depth);
Insert cell
Insert cell
{
const svg = d3.create("svg").attr("width", 300).attr("height", 300);
svg.selectAll("circle")
.data(d3.range(penguinCols.bill_length.length))
.join(enter => {
enter.append("circle")
.attr("r", 2)
.attr("fill", "black")
.attr("cx", ix => xScale(penguinCols.bill_length[ix]))
.attr("cy", ix => yScale(penguinCols.bill_depth[ix]))
});
return svg.node();
}
Insert cell
Insert cell
{
const svg = d3.create("svg").attr("width", 300).attr("height", 300);
svg.selectAll("circle")
.data(d3.range(penguinCols.bill_length.length).map(ix => [penguinCols, ix]))
.join(enter => {
enter.append("circle")
.attr("r", 2)
.attr("fill", "black")
.attr("cx", ([data, ix]) => xScale(data.bill_length[ix]))
.attr("cy", ([data, ix]) => yScale(data.bill_depth[ix]))
});
return svg.node();
}
Insert cell
Insert cell
Insert cell
Insert cell
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