Public
Edited
Aug 7, 2024
Importers
Insert cell
Insert cell
Plot.lineY(data, { x: "Date", y: "Counsellors", tip: true }).plot({
title: "Number of BetterHelp counsellors over time",
caption:
"The graph indicates a sigmoid shape, where it grew exponentially over the pandemic and started to saturate as it ended. There was a clear data anomaly around late 2021 that caused the number of therapists to dramatically decrease and flatline, before returning to its normal growth rate.",
y: {
tickFormat: "s",
grid: true,
ticks: 5
},
marks: [Plot.ruleY([0])]
})
Insert cell
Plot.plot({
title: "Cumulative user growth hasn't really plateaued",
caption:
"Although cumulative growth has slowed, it hasn't returned to the pre-pandemic slope, and is much closer to early- and mid-pandemic levels. New users are trying the service at a similar pace.",
x: {
domain: [new Date("2018-12-04"), new Date("2024-07-01")]
},
clip: true,
y: {
tickFormat: "s",
grid: true,
ticks: 5,
label: "All-time users"
},
marks: [
Plot.lineY(data, { x: "Date", y: "Users", tip: true }),
Plot.ruleY([0]),
Plot.ruleX(dates, {
x: "Date",
strokeDasharray: [4, 3],
stroke: "#3a7a4b",
strokeWidth: 1,
tip: true
}),
Plot.text(dates, {
x: "Date",
text: "Text",
dx: -4,
y: 0,
dy: -4,
fill: "#3a7a4b",
stroke: "white",
strokeWidth: 7,
rotate: -90,
textAnchor: "start",
lineAnchor: "bottom",
fontWeight: "bold"
})
]
})
Insert cell
data = [
// Originally, the about page had an updating counter
// https://web.archive.org/web/20240000000000*/https://www.betterhelp.com/about/
// (Before this, the homepage said 'Over 2,000', which clearly wasn't true)
{ Date: "2017-08-15", Counsellors: 1595 },
{ Date: "2018-02-26", Counsellors: 1761 },
{ Date: "2018-03-20", Counsellors: 1839 },
{ Date: "2018-04-03", Counsellors: 1883 },
{ Date: "2018-05-23", Counsellors: 1933 },
{ Date: "2018-08-14", Counsellors: 2283 },
// The counters then moved to the homepage after a few months of silence
// https://web.archive.org/web/20181204043742/https://www.betterhelp.com/
// These updated very frequently so I sample ~monthly
{ Date: "2018-12-04", Counsellors: 3404, Users: 467_464 },
{ Date: "2019-01-01", Counsellors: 3486, Users: 481_050 },
{ Date: "2019-02-01", Counsellors: 3641, Users: 500_911 },
{ Date: "2019-02-28", Counsellors: 3719, Users: 517_599 },
{ Date: "2019-03-11", Counsellors: 3873, Users: 524_506 },
{ Date: "2019-04-01", Counsellors: 3744, Users: 537_317 },
{ Date: "2019-05-12", Counsellors: 4033, Users: 562_373 },
{ Date: "2019-05-31", Counsellors: 4061, Users: 575_719 },
{ Date: "2019-06-07", Counsellors: 4151, Users: 581_261 },
{ Date: "2019-07-01", Counsellors: 4186, Users: 600_150 },
{ Date: "2019-07-31", Counsellors: 4466, Users: 625_713 },
{ Date: "2019-08-29", Counsellors: 4758, Users: 649_810 },
{ Date: "2019-10-02", Counsellors: 4900, Users: 678_788 },
{ Date: "2019-11-12", Counsellors: 5332, Users: 717_087 },
{ Date: "2019-12-04", Counsellors: 5486, Users: 734_035 },
{ Date: "2020-01-07", Counsellors: 5672, Users: 760_421 },
{ Date: "2020-01-28", Counsellors: 6209, Users: 781_846 },
{ Date: "2020-02-12", Counsellors: 6530, Users: 798_489 },
{ Date: "2020-03-19", Counsellors: 7161, Users: 839_950 },
{ Date: "2020-04-01", Counsellors: 7303, Users: 857_453 },
{ Date: "2020-05-04", Counsellors: 8259, Users: 950_363 },
{ Date: "2020-06-09", Counsellors: 9386, Users: 1_033_195 },
{ Date: "2020-07-01", Counsellors: 10106, Users: 1_079_201 },
{ Date: "2020-07-30", Counsellors: 11357, Users: 1_140_617 },
{ Date: "2020-09-01", Counsellors: 11735, Users: 1_213_962 },
{ Date: "2020-10-05", Counsellors: 12695, Users: 1_269_724 },
{ Date: "2020-11-02", Counsellors: 13408, Users: 1_317_272 },
{ Date: "2020-12-05", Counsellors: 14197, Users: 1_372_812 },
{ Date: "2021-01-01", Counsellors: 14589, Users: 1_421_645 },
{ Date: "2021-01-31", Counsellors: 15799, Users: 1_493_776 },
{ Date: "2021-03-03", Counsellors: 16082, Users: 1_571_354 },
{ Date: "2021-04-05", Counsellors: 17516, Users: 1_649_122 },
{ Date: "2021-05-01", Counsellors: 19376, Users: 1_715_226 },
{ Date: "2021-06-02", Counsellors: 20612, Users: 1_795_049 },
{ Date: "2021-07-01", Counsellors: 21312, Users: 1_884_557 },
{ Date: "2021-08-01", Counsellors: 22290, Users: 1_962_677 },
{ Date: "2021-08-31", Counsellors: 23258, Users: 2_043_135 },
{ Date: "2021-09-30", Counsellors: 24314, Users: 2_128_414 },
{ Date: "2021-11-01", Counsellors: 25209, Users: 2_234_879 },
{ Date: "2021-12-01", Counsellors: 20590, Users: 2_325_724 },
{ Date: "2021-12-29", Counsellors: 20590, Users: 2_382_598 },
{ Date: "2022-02-01", Counsellors: 20590, Users: 2_490_943 },
{ Date: "2022-03-01", Counsellors: 22914, Users: 2_578_547 },
{ Date: "2022-04-01", Counsellors: 23784, Users: 2_645_363 },
{ Date: "2022-05-01", Counsellors: 24597, Users: 2_767_838 },
{ Date: "2022-06-01", Counsellors: 25426, Users: 2_874_628 },
{ Date: "2022-07-01", Counsellors: 25529, Users: 2_972_047 },
{ Date: "2022-08-01", Counsellors: 26734, Users: 3_073_355 },
{ Date: "2022-09-01", Counsellors: 27239, Users: 3_188_142 },
// Here, they finally change the landing page design but keep the counters
{ Date: "2022-10-01", Counsellors: 27694, Users: 3_295_527 },
{ Date: "2022-11-01", Counsellors: 28366, Users: 3_404_787 },
{ Date: "2022-12-01", Counsellors: 29344, Users: 3_502_180 },
{ Date: "2023-01-01", Counsellors: 29957, Users: 3_588_998 },
{ Date: "2023-02-01", Counsellors: 30961, Users: 3_704_004 },
{ Date: "2023-03-01", Counsellors: 31211, Users: 3_807_453 },
{ Date: "2023-04-01", Counsellors: 31437, Users: 3_919_895 },
{ Date: "2023-05-03", Counsellors: 31973, Users: 4_028_750 },
{ Date: "2023-06-01", Counsellors: 32327, Users: 4_125_790 },
{ Date: "2023-07-01", Counsellors: 31561, Users: 3_980_915 },
{ Date: "2023-07-31", Counsellors: 32888, Users: 4_065_366 },
{ Date: "2023-09-01", Counsellors: 32673, Users: 4_156_138 },
{ Date: "2023-10-01", Counsellors: 33840, Users: 4_238_309 },
{ Date: "2023-11-02", Counsellors: 34295, Users: 4_327_668 },
{ Date: "2023-12-01", Counsellors: 34507, Users: 4_395_512 },
{ Date: "2023-12-31", Counsellors: 34378, Users: 4_441_968 },
{ Date: "2024-01-30", Counsellors: 35194, Users: 4_453_501 },
{ Date: "2024-03-02", Counsellors: 35454, Users: 4_532_200 },
{ Date: "2024-04-03", Counsellors: 35488, Users: 4_600_691 },
{ Date: "2024-05-02", Counsellors: 35469, Users: 4_674_328 },
{ Date: "2024-06-02", Counsellors: 35515, Users: 4_753_672 },
{ Date: "2024-07-01", Counsellors: 34158, Users: 4_825_205 }
// And finally, at time of writing, they only just removed the counter
].map(({ Date: dateString, Counsellors, Users }) => ({
Date: new Date(dateString),
Counsellors,
Users
}))
Insert cell
dates = [
{ Date: "2020-03-11", Text: "WHO declares COVID-19 pandemic" },
{ Date: "2023-05-05", Text: "WHO ends pandemic status" }
].map(({ Date: rawDate, Text }) => ({ Date: new Date(rawDate), Text }))
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