Public
Edited
Mar 20, 2023
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
drawChart = ele => {
const svg = ele
.append("svg")
.style("height", chart_height + "px")
.style("width", chart_width + "px");
// Axes
svg.append("g").call(xAxis);
svg.append("g").call(yAxis);

// Axis labels, title
svg.append('text').call(xLabel);
svg.append('text').call(chartTitle);
svg.append('text').call(yLabel);

// Points
svg
.selectAll("circle")
.data(d => d.values)
.join("circle")
.call(drawPoint);
}
Insert cell
Insert cell
by_type_data = d3
.nest()
.key(d => d.type)
.entries(chart_data)
Insert cell
by_type_chart = {
const div = d3.create("div").style("display", "block");
const charts = div
.selectAll("div")
.data(by_type_data) // this will have only 4 elements in it
.join("div")
.style("height", chart_height + "px")
.style("width", chart_width + "px")
.attr("class", "chart-container")
.call(drawChart);

return div.node();
}
Insert cell
Insert cell
chart_height = 300
Insert cell
chart_width = 400
Insert cell
x = d3
.scaleLinear()
.domain(d3.extent(chart_data, d => d.x))
.range([margin.left, chart_width - margin.right])
Insert cell
y = d3
.scaleLinear()
.domain(d3.extent(chart_data, d => d.y))
.range([chart_height - margin.bottom, margin.top])
Insert cell
Insert cell
tickFormatter = d3.format("$.2s")
Insert cell
xAxis = g =>
g
.attr("transform", `translate(0,${chart_height - margin.bottom})`)
.call(d3.axisBottom(x).tickFormat(tickFormatter))
Insert cell
yAxis = g =>
g
.attr("transform", `translate(${margin.left},0)`)
.call(d3.axisLeft(y).tickFormat(tickFormatter))
Insert cell
xLabel = ele =>
ele
.text("In State Tuition")
.attr("x", (x.range()[1] - x.range()[0]) / 2)
.attr("y", chart_height - margin.bottom + 35)
.style('font-family', "sans-serif")
// .style("text-anchor", "middle")
.style("font-size", '14px')
Insert cell
chartTitle = ele =>
ele
.text(d => d.key)
.attr("transform", `translate(${chart_width / 2}, ${20})`)
.style("text-anchor", "middle")
.style('font-family', "sans-serif")
Insert cell
yLabel = ele =>
ele
.text("Out of State Tuition")
.attr(
"transform",
`translate(${margin.left - 40}, ${chart_height / 2})rotate(-90)`
)
.style("text-anchor", "middle")
.style('font-family', "sans-serif")
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
html`<style>
.chart-container {
display:inline-block;
}
</style>`
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