Published
Edited
Sep 28, 2022
Insert cell
# Radial bar chart sketch
Insert cell
xAccessor = "name"
Insert cell
Insert cell
innerR = 100
Insert cell
outerR = width / 2.5
Insert cell
padding = 0.05
Insert cell
arc = d3.arc()
.innerRadius(d => y(0))
.outerRadius(d => y(d[yAccessor]))
.startAngle(d => x(d[xAccessor]))
.endAngle(d => x(d[xAccessor]) + x.bandwidth())
.padAngle(padding)
.padRadius(innerR)
Insert cell
y = d3.scaleRadial()
.domain([0, d3.max(formattedData, d => d[yAccessor])])
.range([innerR, outerR])
Insert cell
x = d3.scaleBand()
.domain(formattedData.map(d => d[xAccessor]))
.range([0, 2 * Math.PI])
.align(0)
Insert cell
formattedData = [{name: "bla", value: 6}, {name: "bla2", value: 2}, {name: "bla3", value: 7}, {name: "bla4", value: 1},{name: "bla5", value: 6}, {name: "bla6", value: 2}, {name: "bla7", value: 7}, {name: "bla8", value: 1}, {name: "bla9", value: 6}, {name: "bla10", value: 2}, {name: "bla11", value: 7}, {name: "bla12", value: 1},{name: "bla13", value: 6}, {name: "bla14", value: 2}, {name: "bla15", value: 7}, {name: "bla16", value: 1}]
Insert cell
formattedData2 = [{name: "bla", value: 3}, {name: "bla2", value: 8}, {name: "bla3", value: 2}, {name: "bla4", value: 3},{name: "bla5", value: 5}, {name: "bla6", value: 2}, {name: "bla7", value: 5}, {name: "bla8", value: 7}, {name: "bla9", value: 5}, {name: "bla10", value: 3}, {name: "bla11", value: 3}, {name: "bla12", value: 2},{name: "bla13", value: 9}, {name: "bla14", value: 5}, {name: "bla15", value: 6}, {name: "bla16", value: 2}]
Insert cell
fillQuarters = i => i < 4 ? "#bf212f" : i < 8 ? '#264b96' : i < 12 ? '#27b376' : '#f9a73e'
Insert cell
Insert cell
// tweenIndex = {
// for (let i = 0; i < 1000; ++i) {
// yield i / 1000;
// }
// }
Insert cell
function* oscillator(period) {
while (true) {
yield Math.sin(Date.now() / period) / 2 + .5;
}
}

// (sin(x)+1)/2
Insert cell
tweenIndex = {
for (const t of oscillator(1000)) {
yield t
}
}
Insert cell
interpolator = (a, b) => d3.interpolate(
{ value: a.value },
{
...b,
}
)
Insert cell
interpolator(formattedData[0], formattedData2[0])(.3)
Insert cell
tweenedData = formattedData.map((d,i) => interpolator(d, formattedData2[i])(tweenIndex))
Insert cell

One platform to build and deploy the best data apps

Experiment and prototype by building visualizations in live JavaScript notebooks. Collaborate with your team and decide which concepts to build out.
Use Observable Framework to build data apps locally. Use data loaders to build in any language or library, including Python, SQL, and R.
Seamlessly deploy to Observable. Test before you ship, use automatic deploy-on-commit, and ensure your projects are always up-to-date.
Learn more