Introducing plotly.py Theming đ¨đ
Itâs finally here: plotly.py now supports theming!
Create your own theme or use one of seven out-of-the-box themes that ship with plotly.py 3.4 (released today!). Mix, match, and merge themes to get exactly the look and feel that you want, and save your favorite defaults to re-use over again.
Theming gives you more options for customizing the figures you create. It looks great and saves time, and makes branding consistency much easier with the possibility of global default settings.
Want the details? Keep reading to learn more about making your own themes and check out the seven shiny, pre-made ones that we know youâll love đâ¨
Out-of-the-box themes đŚ
Plotly.py 3.4 ships with seven pre-registered themes:
Default styling
First, hereâs the default styling for a bubble chart with five traces and a 3D surface plot:


seaborn
The seaborn theme is inspired by the seaborn library:


ggplot2
The ggplot2 theme is inspired by ggplot2


Original Plotly themes
Three original themes have been designed for plotly.py, including plotlyâŚ


plotly_whiteâŚ


and plotly_darkâŚ


which looks real slick with JupyterLabâs dark theme.

There are also two add-on themes. Use these as stand-alone themes, or mix and match them with the others.
presentation boosts the visibility of fonts, markers, and line widths for those times when youâre sharing your data with the world and need it to be visible at a distance:

presentation can be combined with other themes, for example, plotly+presentation:

Finally, xgridoff disables those vertical x-axis lines for a streamlined look.
plotly+presentation+xgridoff:

Click and switch đ
Thanks to the design of Plotly.js, ipywidgets, and plotly.py you can apply themes to figures youâve already created and displayed in the notebook. Just display the figure as a FigureWidget and then assign theme names to the figureâslayout.template property.

Make your own đ§
A theme is specified as a layout.template object. In the notebook, import the following to begin:
import plotly.graph_objs as go
import plotly.io as pioFirst, you create an empty figure, say, with large Courier text:
fig = go.Figure(layout={'title': 'Figure Title',
'font': {'size': 20, 'family': 'Courier'}})
Calling fig.layout will output:
Layout({
'title': 'Figure Title',
'font': {'family': 'Courier', 'size': 20}
})Then, with the pio.to_templated function, a copy of the figure is returned with the styling attributes extracted and moved to the layout.template object:
templated_fig = pio.to_templated(fig)Calling templated_fig.layout will output:
Layout({
'title': 'Figure Title',
'template': {'layout': {'font': {'family': 'Courier',
'size': 20}}},
})Notice how the font properties are now inside the template object? Figures with this template object will now display text in size 20 Courier text unless the font properties are explicitly overridden.
Save it for later đ
Letâs say size 20 Courier font is your jam, and you want to save it officially for later use:
pio.templates['large_courier'] = templated_fig.layout.templateThis registers your theme, named large_courier, so you can specify it by name when constructing a new figure:
fig2 = go.Figure(layout={'title': 'Figure 2 Title',
'template': 'large_courier'})
fig2.layoutWhich will yield:
Layout({
'title': 'Figure 2 Title',
'template': {'layout': {'font': {'family': 'Courier',
'size': 20}}},
})VoilĂĄ, fresh large_courier jam served up and ready to go!
đđđ
Now, letâs say size 20 Courier font is really, really your jam, and you want all new figures to be covered:
pio.templates.default = 'large_courier'This sets your theme as a global default. Now it will be applied automatically when creating any new figure.
fig3 = go.Figure(layout={'title': 'Figure 3 Title'})
fig3.layoutYields:
Layout({
'title': 'Figure 3 Title',
'template': {'layout': {'font': {'family': 'Courier',
'size': 20}}},
})You can also set defaults for traces and object array elements like annotations, shapes, and images. This makes consistent branding easier, for example, by labeling your figures âCONFIDENTIALâ or including a default company logo.
Learn more
Have questions or want more details? See GitHub for more info, check out this example notebook, or come hang out with us on the plotly.py forum.
