How it works#
PloSe’s aim is to help you create a dataset that perfectly corresponds to your figure. By wrapping the matplotlib plotting functions, PloSe captures data exactly as you pass them to the plotting function.
PloSe’s focus lies on serializing the information content with regard to data rather than visual representation. The serialized information about visual representation is limited to the minimum required for basic reproducibility (e.g., axis scaling) or telling traces and data points apart (e.g., line/point colors, styles and markers).
Example#
Let’s plot the amplitude A of a damped harmonic oscillator driven by a periodic force with the amplitude A_E:
import numpy as np
from plot_serializer.matplotlib.serializer import MatplotlibSerializer
n = 300
A_E = 0.02 # driving force amplitude
omega_0 = 3 # eigenfrequency of the oscillator
omega = np.linspace(0, 10, n) # driving force frequency
eta = omega/omega_0 # relative driving force frequency
def calculate_amplitude(D, eta, A_E):
A = A_E/np.sqrt((1-eta**2)**2 + (2*eta*D)**2)
return A
serializer = MatplotlibSerializer()
fig, axs = serializer.subplots()
D_list = np.arange(0.1, 1, 0.2) # damping ratio
for D in D_list:
axs.plot(omega, calculate_amplitude(D, eta, A_E), label="D = {}".format(round(D,2)))
axs.legend()
serializer.show()

Serializable Plot Styling Information#
PloSe will save basic styling information. What gets serialized may differ based on plot type. Generally, the following styling information get serialized: * color * line style * line width * marker style * marker size
PloSe takes the information from the matplotlib classes automatically, so you can interact with the axs
object as you normally would if using matplotlib
.
For example, let’s add custom defined colors to the example from above:
serializer = MatplotlibSerializer()
fig, axs = serializer.subplots()
D_list = np.arange(0.1, 1, 0.2)
color_list = ["#fdca00", "#004E73", "#afcc50", "#50b695", "#ee7a34"]
for D, c in zip(D_list, color_list):
axs.plot(omega, calculate_amplitude(D, eta, A_E), color=c, label="D = {}".format(round(D,2)))
The diagram will look like this:

This information about the color relates to each trace, so to inspect it in the JSON file, we’ll navigate to "traces"
:
...
"traces": [
{
"type": "line",
"line_color": "#fdca00ff",
"line_thickness": 1.5,
"line_style": "-",
"marker": "None",
"label": "D = 0.1",
"datapoints": [
{
"x": 0.0,
"y": 0.02
},
...]}
]
Using Serializer object vs. matplotlib.pyplot#
So far the Serializer class for Matplotlib only supports the subplots and show method, meaning any other operations on the pyplot object will not get serialized and making such changes to your plot still requires calling the functions on the pyplot object. The reason for this being that the Serializer was not implemented as a fully functional proxy for the pyplot object like the AxesProxy class is for Axes of matplotlib.axes.
What gets serialized#
PlotSerializer in general always reads out the main arguments of the plot function. Further serialized keyword parameters will be specifically noted. As a rule of thumb most options to change the style and look of a diagram will not be serialized and can even distort the data inside the JSON file. Similarly beware of modifying diagrams after creating them. An example of this would be you taking the returned objects of these methods and calling further functions on them, modyfying their attributes. This will not be caught upon by PlotSerializer and the change will be ignored.
Plot Serializer currently supports the following plot types. Supported arguments that will get serialized are noted below. See here for an explanation of these parameters.
Plot#
- Serialized by default:
title
x_label, y_label, z_label
x_scale, y_scale, z_scale
x_lim, y_lim, z_lim
spines
Line2D#
- Serialized by default:
x
y
- Serialized if provided:
label
linestyle
linewidth
color
marker
Pie#
- Serialized by default:
x
- Serialized if provided:
labels
explode
color, given as a list of strings
Bar#
- Serialized by default:
x
height
- Optional
color
Boxplot#
- Serialized by default:
x
- Serialized if provided:
tick_labels
notch
whis
bootstrap
usermedians
conf_intervals
ErrorBar#
- Serialized by default:
x
y
- Serialized if provided:
xerr
yerr
color
ecolor
label
marker
Histogram#
- Serialized by default:
x
- Serialized if provided:
bins
label
color
density
cumulative
2D-Scatter#
- Serialized by default:
x
y
- Serialized if provided:
label
s
c
cmap
norm
marker
3D-Line#
- Serialized by default:
x
y
- Serialized if provided:
label
color as a string, or rgb/rgba tuple
linewidth
linestyle
marker
3D-Surface#
- Serialized by default:
x, as a 2D float array
y, as a 2D float array
z, as a 2D float array
- Serialized if provided:
label
marker
3D-Scatter#
- Serialized by default:
x
y
z
- Serialized if provided:
label
s
c
cmap
norm
marker