Who are the ggplot2 extenders? And how to become one?


What does extension promise?

What does ggplot2 give us?

ggplot2 give us intuitive, composible interface for plotting.

‘Speak your plot into existence’


And extension: More of the same.

‘extension allows fluid ggplot2-consistent syntax in domains that base ggplot2 doesn’t handle.’

(you almost don’t need to look at documentation 🥹). Well-written extensions will be aligned with ggplot2 syntax and afford the already-learned capabilities.

‘Speak your (’diverging bar chart/bump chart/circlepacking chart’) into existence’


But ggplot2 extension is …

‘not for the faint of heart’. 💔 2X


Epic journey to extension

  1. 💪 kind of effortful plotting with base ggplot2
  2. 🗡🛡⛔️ valient effort to produce an extensions (bravery)
  3. 👶 plotting with the extensions (woohoo!) - child’s play

How can something that is so useful be out of reach for so many? 😭

‘ggplot2 extenders is such an exclusive club’ - 2022


Super extenders

– Show production…


Super extenders…

  1. something happens, and adding extension doesn’t feel effort-ful, and they see extension opportunities everywhere…

  2. 💪 kind of effortful plotting with base ggplot2

  3. 🧠 focused attention and effort (not bravery)

  4. 👶 plotting with the extensions (woohoo!) - child’s play


What if we worked on this

  1. 🗡🛡⛔️ valient effort to produce an extensions (bravery)

  2. 🧠 focused attention and effort (not bravery)

If there were concerted effort and community around this?


‘Draw anything with ggplot2.’

‘Draw anything with ggplot2 - without loosing your mind 🧠’

Educational materials… As step by step as possible…
With accessible examples.


Easy Geom Recipes

penguins_medians <- penguins_clean |> 
  summarize(bill_length_mm_median = median(bill_length_mm),
            bill_depth_mm_median = median(bill_depth_mm))

# Plot.
penguins_clean |> 
  ggplot() + 
  aes(x = bill_depth_mm, y = bill_length_mm) + 
  geom_point() + 
  geom_point(data = penguins_medians,
             aes(x = bill_depth_mm_median,
                 y = bill_length_mm_median),
             size = 8, color = "red") + 
  labs(title = "Created with base ggplot2")

Who are the ggplot2 extenders?

COWY-2023: ‘We have a support group for that’

COWY-2025: ‘We have a support group for that… growing in numbers, video recordings, double digit attendees, active discussion board, our first COWY attendee, social media presence, Posit supported, testimonials’


2023 - small group of extenders

2025 - group of extenders and extension-interested


Extension competencies

How can something that is so useful be commanded by so few? 😭

Extender unicorns… Maybe AI aleviates some of this… Or maybe community.

Closing remarks, Other Relevant Work, Caveats