jtrakk
April 5, 2020, 4:58am
1
I want to save my Arviz plots. When I do arviz.plot_trace()
I get a numpy array. I can use matplotlib.pyplot.savefig(path)
but that’s pretty opaque – I never know which plots are being saved.
Is there a way to simply get a figure object from the trace plot, so I can save it with figure.savefig
?
4 Likes
Since arviz
uses matplotlib
, to save a figure, you would have to use matplotlib.pyplot.savefig()
. If you use the bokeh
backend`, there is another way to save a figure: https://docs.bokeh.org/en/latest/docs/user_guide/export.html
One way is to access the figure object from the axis object. ArviZ uses one figure object per plot.
axes = az.plot_trace(...)
fig = axes.ravel()[0].figure
fig.savefig(...)
For bokeh you probably want to save a layout, (each axis is it’s own bokeh figure and they are bind together with layout object)
5 Likes
For bokeh you probably want to save a layout
I’ve been struggling to figure out how to do this. Do you have an example?
Assuming you want to export them as png, it would look like:
from bokeh.io import export_png
from bokeh.layouts import gridplot
export_png(gridplot(ax.tolist()), filename="filename.png")
which should work if ax
is a numpy array of length >1. For a more general thing you can try
if isinstance(ax, ndarray):
if len(ax.shape) == 1:
export_png(gridplot([ax.tolist()]), filename=pngfilename)
else:
export_png(gridplot(ax.tolist()), filename=pngfilename)
else:
export_png(ax, filename=pngfilename)
2 Likes