Public
Edited
Nov 1, 2023
Insert cell
Insert cell
race = {
const race = await FileAttachment("TenMileRace.csv").csv({typed: true});
race.forEach(function(runner) {runner.timeMinutes = runner.time / 60;});
return race;
}
Insert cell
Insert cell
Insert cell
minTime = d3.min(d3.map(race, d => d.timeMinutes))
Insert cell
minAge = d3.min(d3.map(race, d => d.age))
Insert cell
maxAge = d3.max(d3.map(race, d => d.age))
Insert cell
maxTime = d3.max(d3.map(race, d => d.timeMinutes))
Insert cell
Insert cell
viewof sex = Inputs.select(["F", "M"], {label: "Sex of runner: "})
Insert cell
viewof opacity = Inputs.range([0, 1], {label: "Opacity: ", step: 0.01})
Insert cell
Plot.plot({
inset: 8,
grid: true,
marks: [
Plot.dot(
d3.filter(race, d => d.sex == sex),
{x: "age", y: "timeMinutes", fill: "black", fillOpacity: opacity}
)
],
x: {domain: [minAge, maxAge]},
y: {label: "time (minutes)", domain: [minTime, maxTime]},
})
Insert cell
Plot.plot({
marks: [Plot.density(
race.map(d => ({age: d.age, timeMinutes: d.timeMinutes, sex: d.sex == "M" ? "male" : "female"})),
{x: "age", y: "timeMinutes", stroke: "sex"}
)],
y: {label: "time (minutes)"},
color: {legend: true}
})
Insert cell
Plot.plot({
marks: [
Plot.frame(),
Plot.density(
race.map(d => ({age: d.age, timeMinutes: d.timeMinutes, sex: d.sex == "M" ? "male" : "female"})),
{x: "age", y: "timeMinutes", fx: "sex"}
)],
y: {label: "time (minutes)"}
})
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