Published
Edited
Apr 29, 2020
Insert cell
Insert cell
DATA = [
{ fruit: 'Pomme', num: 6 },
{ fruit: 'Poire', num: 4 },
{ fruit: 'Banane', num: 3 },
]
Insert cell
Insert cell
viewof d3view = {
const WIDTH = width
const HEIGHT = width / 3
const container = DOM.svg(WIDTH, HEIGHT)
const svg = d3.select(container)
const pieData = d3.pie().value(d => d.num)(DATA)
const arcCreator = d3.arc()
.innerRadius(0)
.outerRadius(HEIGHT / 2)
const color = ({ data }) => {
switch (data.fruit) {
case 'Banane': return 'gold'
case 'Poire': return 'limegreen'
default: return 'indianred'
}
}
const pie = svg.append('g')
.attr('transform', `translate(${WIDTH / 2}, ${HEIGHT / 2})`)
pie.selectAll('path')
.data(pieData)
.enter()
.append('path')
.attr('d', arcCreator)
.attr('fill', color)
pie.selectAll('text')
.data(pieData)
.enter()
.append('text')
.attr('transform', d => `translate(${arcCreator.centroid(d)})`)
.attr('text-anchor', 'middle')
.text(d => `${d.data.fruit}s: ${d.data.num}`)
return container
}
Insert cell
d3 = require('d3')
Insert cell
Insert cell
bbView = DOM.element('div', { style: `width:${width}px;height:${width/3}px` })
Insert cell
billboard = require('billboard.js')
Insert cell
billboardCss = html`<link href='${resolve('billboard.js/dist/billboard.css')}' rel='stylesheet' />`
Insert cell

billboard.bb.generate({
data: {
columns: DATA.map(({ fruit, num }) => ([ fruit, num ])),
type: 'pie',
},
bindto: bbView
})
Insert cell
Insert cell
chartjsCanvas = DOM.canvas(width, width / 2)
Insert cell
chartjs = require('https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.js')
Insert cell
new chartjs(chartjsCanvas, {
type: 'pie',
data: {
labels: DATA.map(d => d.fruit),
datasets: [
{
data: DATA.map(d => d.num),
backgroundColor: [
'indianred',
'limegreen',
'gold'
]
}
]
}
})
Insert cell
Insert cell
chartistDiv = {
const div = DOM.element('div')
div.style.height = `${width / 2}px`
return div
}
Insert cell
chartist = require('chartist')
Insert cell
chartistCss = html`<link rel='stylesheet' href='https://unpkg.com/chartist@0.11.0/dist/chartist.css' />`
Insert cell
new chartist.Pie(chartistDiv, {
labels: DATA.map(d => d.fruit),
series: [
...DATA.map(d => d.num),
],
})
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