SciPy 2026

GoFish: A Grammar of More Graphics!
2026-07-17 , Johnson Great Room

Visualization libraries like Altair are based on the Grammar of Graphics (GoG), a theory of visualization that moved beyond fixed chart types towards a composable graphical language. But while the GoG makes simple charts easy, custom graphics still require low-level libraries like matplotlib. We present GoFish, a grammar of more graphics! GoFish formalizes patterns of visual structure (like connecting shapes with lines or spreading them out in space) letting you create diagrams, annotated charts, and infographics piece by declarative piece. In this talk, we'll see some fun and funky GoFish charts, and I'll uncover the hidden structure behind everyday visualizations.


Libraries like Altair and Plotly brought the Grammar of Graphics to Python, making it easy to map data to marks (bar, line, area, etc.) and channels (size, color, position, etc.). But when you need annotations, custom layouts, or pictographic designs, you're back to wrestling with matplotlib and manually computing coordinates.

GoFish is a new, open-source Python library we’ve developed at MIT for making custom, data-driven graphics. It is MIT-licensed and currently in alpha, but will hit beta before the conference. It's available on pypi as gofish-graphics.

While most visualization libraries are built on marks and channels, GoFish is also built around visual structure, like spreading shapes out in space, connecting shapes with lines, or containing them in a common region. We call these primitives graphical operators. In conjunction with marks and channels, graphical operators allow GoFish users to easily produce a wide range of graphics: richly annotated bar charts and scatter plots; nested charts like scatterpies; polar ribbon charts; and composited images that layer and intersect shapes. They also give us a new understanding of more typical charts like stacked bars, waffles, and ribbons, which turn out to be simple combinations of just a few operators.

About Me
I'm a last-year PhD student at MIT in the VIS group. My research applies programming language theory to visualization design. I presented GoFish as a full paper at the IEEE VIS conference in November, 2025 to a standing-room only crowd.

Audience and Takeaways
The audience for the talk is anyone who's hit the limits of a library like Altair, Plotly, or seaborn, built a scientific figure in Matplotlib, or is just curious about the theory behind visualization. The audience will leave the talk with both a practical understanding of how GoFish can be used to build visualizations and a new conceptual understanding of how graphics are structured.

Talk Outline
The Grammar of Graphics and its limits (~5 min). I'll introduce the marks-and-channels approach to specifying charts, some of its history, and its use in Python. I'll then frame the core tension: high-level libraries like Altair are easy but restrictive, while low-level libraries like Matplotlib are expressive but tedious. What if there was a better way?

Building up GoFish by example (~15 min). I'll start by showing examples of visual structure in familiar charts to build intuition for what graphical operators capture. I'll then introduce GoFish's API piece by piece: first marks and channels, then graphical operators that compose marks into glyphs and charts. Along the way I'll show how users can use libraries like pandas with GoFish for sorting and aggregation; how GoFish's compositional approach naturally supports nested charts like scatterpies; and how selecting marks in an existing chart makes it easy to add annotations and connecting ribbons.

The fun stuff and a call to action (~5 min). I'll wrap up with a showcase of cool graphics GoFish enables, and I'll end with an invitation to try GoFish and contribute. We want to help more people create expressive visualizations!

See also:

Josh is a sixth (and last!) year PhD student in the MIT Visualization Group. He builds new theories and libraries for charts and diagrams and is obsessed with how a well-designed picture can create a new insight. In his free time (any time really), Josh may be seen doing contact improv, singing, or playing guitar.