Public
Edited
Dec 9, 2022
1 fork
Insert cell
Insert cell
data = FileAttachment("main_data@2.csv").csv({ typed: true })
Insert cell
m_data = data.map((d) => ({
Characteristic: d["Characteristic"],
"US Citizen or PR": d["M - US Citizen or PR"],
"Temp VISA Holder": d["M - Temp VISA Holder"],
Unknown: d["M - Unknown"]
}))
Insert cell
f_data = data.map((d) => ({
Characteristic: d["Characteristic"],
"US Citizen or PR": d["F - US Citizen or PR"],
"Temp VISA Holder": d["F - Temp VISA Holder"],
Unknown: d["F - Unknown"]
}))
Insert cell
fld = data.map((row) => row.Characteristic)
Insert cell
cat = data.columns.slice(1)
Insert cell
m_cat = data.columns.slice(1,4).map((s) => s.slice(4))
Insert cell
f_cat = data.columns.slice(4).map((s) => s.slice(4))
Insert cell
m_doc = m_cat.flatMap((CitizenStatus) =>
m_data.map((d) => ({
"MaleDoctorates": d.Characteristic,
CitizenStatus,
Count: d[CitizenStatus]
}))
)
Insert cell
f_doc = f_cat.flatMap((CitizenStatus) =>
f_data.map((d) => ({
"FemaleDoctorates": d.Characteristic,
CitizenStatus,
Count: d[CitizenStatus]
}))
)
Insert cell
Insert cell
m_chart = Plot.plot({
width,
y: { tickFormat: "s", domain: [0, 8000], grid: true },
color: { scheme: "spectral", domain: m_cat },
marks: [
Plot.barY(m_doc, {
x: "MaleDoctorates",
y: "Count",
fill: "CitizenStatus"
}),
Plot.text(m_doc, {
x: "MaleDoctorates",
y: "Count",
text: (d) => d.Count,
rotate: 180
}),
Plot.ruleY([0])
]
})
Insert cell
Insert cell
doc = cat.flatMap((CitizenStatus) =>
data.map((d) => ({
FieldOfStudy: d.Characteristic,
CitizenStatus,
Count: d[CitizenStatus]
}))
)
Insert cell
key = Swatches(d3.scaleOrdinal(cat, d3.schemeSpectral[cat.length]), {
title: "Citizenship Status",
ticksize: 0
})
Insert cell
chart = Plot.plot({
width,
y: { tickFormat: "s" },
color: { scheme: "spectral", domain: cat },
marks: [
Plot.barY(doc, {
x: "FieldOfStudy",
y: "Count",
fill: "CitizenStatus"
}),
Plot.ruleY([0])
]
})
Insert cell
import { StackedBarChart } from "@d3/stacked-bar-chart"
Insert cell
import { Legend, Swatches } from "@d3/color-legend"
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