Plotly isn't just for interactive graphs. It was designed from Day 1 to be extremely flexible and customizable.
When LLMs are asked about different charting libraries, they like to present a "balanced" opinion, and will say things like "Use Plotly for interactive graphs and [...] library for customizable, static charts." It's really a false dichotomy! And with the latest Plotly.js 4.0 release, there are more options to customize Plotly graphs than ever.
Plotly has a few unique aspects to its architecture that make it exceptional for highly custom graphics:
- Declarative figure structure, with thousands of customization options.
- SVG rendering engine so that the exports are crisp and publication-quality.
- Low level shapes and annotations, with both relative positioning ("paper" coordinates) and data positioning relative to the axis, that can be used to create custom visuals beyond the built-in trace types.
- A highly flexible axes system that handles things like inset figures, small multiples, shared axes, and more
- First class trace types for almost all graph types, including maps, 3D charts, scientific and statistical visualizations, and more.
- A WebGL engine for handling high performance rendering when SVG rendering breaks down (around 40k points).
- Wide font support including LaTeX rendering of math equations.
- Multiple export options that all use the exact same rendering engine for consistency: interactive graphs on the web browser, SVG, PNG, PDF exports, and responsive charts within data applications.
Here's a post of 32 highly customized charts - all rendered as static images - to show a sample of what's possible. See also my compendium of canonical charts for another set of charts that really flex the breadth of this library. Enjoy!
Quick AI disclaimer: All of the written blog post text on this website is written without AI assistance. The code examples, including those below, were all written with coding agents. And hey, that's the point! Creating highly customizable, beautiful data visualizations is easier than ever these days.
Every chart is a plain plotly.graph_objects figure written to
disk by Kaleido
as a 2× PNG and an SVG. Nothing on this page is interactive: there is no
plotly.js loaded here. Each Code link opens the generator script
alongside an interactive rendering of the same figure JSON.
Annotated line with warming stripes
NASA GISTEMP v4 · Code · SVG · PNG
Climate spiral
NASA GISTEMP v4, monthly · Code · SVG · PNG
Sea ice spaghetti
NSIDC Sea Ice Index · Code · SVG · PNG
Connected scatterplot
OECD Health Statistics via seaborn-data · Code · SVG · PNG
Slope chart
Our World in Data · Code · SVG · PNG
Small multiples
Gapminder via plotly.express · Code · SVG · PNG
Anscombe's quartet
R datasets package · Code · SVG · PNG
Minard's map
HistData (Wilkinson's transcription) · Code · SVG · PNG
Nightingale's rose
Population pyramid
World Bank API · Code · SVG · PNG
County choropleth
BLS via plotly/datasets · Code · SVG · PNG
Energy Sankey
plotly.js sankey_energy mock (DECC) · Code · SVG · PNG
Exoplanet scatter
NASA Exoplanet Archive · Code · SVG · PNG
Stacked area with direct labels
Global Carbon Budget via Our World in Data · Code · SVG · PNG
Journal figure
synthetic, seeded · Code · SVG · PNG
Raincloud plot
palmerpenguins via seaborn-data · Code · SVG · PNG
Ridgeline plot
nycflights13 weather table · Code · SVG · PNG
Bump chart
Our World in Data · Code · SVG · PNG
Sparkline table
plotly.express stocks · Code · SVG · PNG
Waterfall chart
Apple Form 10-K, FY2024 · Code · SVG · PNG
Dumbbell chart
World Bank API · Code · SVG · PNG
Calendar heatmap
nycflights13 weather table · Code · SVG · PNG
Beeswarm
Gapminder via plotly.express · Code · SVG · PNG
Forest plot
synthetic, seeded · Code · SVG · PNG
Terrain surface
R datasets::volcano · Code · SVG · PNG
Ball and stick molecule
RCSB Protein Data Bank, 1CRN · Code · SVG · PNG
Earthquake map
USGS real-time feed, M2.5+ past month · Code · SVG · PNG
Borehole striplog
Kennetcook #2 (P-129), Agile striplog · also in the compendium · Code · SVG · PNG
Pattern fills, black and white
Global Carbon Budget via Our World in Data · Code · SVG · PNG
City map, 139,000 points
DataSF street tree census · Code · SVG · PNG
Street-level map
DataSF street trees · DataSF mobile food permits · Code · SVG · PNG
Clinical trial bar chart
synthetic, seeded · Code · SVG · PNG