Published
Edited
Mar 5, 2021
Importers
Insert cell
md`# Active User Inflows`
Insert cell
activeInflows(ipfsData, 'IPFS Inflow to High-Value')
Insert cell
activeInflows(filecoinData, 'Filecoin Inflow to High-Value')
Insert cell
activeInflows = (transitions, title) => {
const getColor = label => colorMap[label]
const container = html`<canvas></canvas>`;
const flows = [
'First Time',
'Low-Value', 'New Low-Value', 'Reactivated Low-Value', 'High to Low-Value',
'High-Value', 'New High-Value', 'Low to High-Value', 'Reactivated High-Value'
]
new Chart(container, {
type: 'bar',
options: {
legend: { align: 'center', position: 'top' },
title: { display: true, text: title },
scales: {
xAxes: [{stacked: true}],
yAxes: [{stacked: true}]
}
},
data: {
labels: transitions.map((t) => dateDiffToHuman(t.date)),
datasets: flows.map((label, index) => ({
label,
data: transitions.map(s => s.transitions[label]),
backgroundColor: getColor(label)
}))
}
});
return container;
}
Insert cell
color = ({
red: d3.schemeTableau10[2],
orange: d3.schemeTableau10[1],
green: d3.schemeTableau10[4],
teal: d3.schemeTableau10[3],
blue: d3.schemeTableau10[0],
grey: d3.schemeTableau10[9],
yellow: d3.schemeTableau10[5]
})
Insert cell
colorMap = ({
'First Time': color.blue,
'Bounced' : d3.color(color.red).darker().hex(),
'Lapsed Low-Value': color.red,
'Lapsed High-Value': d3.color(color.red).brighter().hex(),
'High to Low-Value': d3.color(color.yellow).brighter(0.5).hex(),
'Low-Value': d3.color(color.yellow).darker(0.25).hex(),
'New Low-Value': color.yellow,
'Reactivated Low-Value': d3.color(color.yellow).brighter(0.25).hex(),
'High-Value': d3.color(color.green).darker(0.25).hex(),
'Low to High-Value': d3.color(color.green).brighter(0.75).hex(),
'New High-Value': d3.color(color.green).brighter(0.12).hex(),
'Reactivated High-Value': d3.color(color.green).brighter(1.7).hex()
})
Insert cell
d3 = require("d3-color@2", "d3-scale-chromatic@2")
Insert cell
Insert cell
ipfsData = (await fetch(`${ipfsGetTransitionsUrl}?start_date=${startDate}`)).json()
Insert cell
filecoinData = (await fetch(`${filecoinGetTransitionsUrl}?start_date=${startDate}`)).json()
Insert cell
Chart = require('https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.bundle.min.js')
Insert cell
import { dateDiffToHuman } from '@protocol/utils'
Insert cell
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