plotgrid

spb.plotgrid.plotgrid(*args, **kwargs)[source]

Combine multiple plots into a grid-like layout. This function has two modes of operation, depending on the input arguments. Make sure to read the examples to fully understand them.

Parameters
argssequence (optional)

A sequence of aldready created plots. This, in combination with nr and nc represents the first mode of operation, where a basic grid with (nc * nr) subplots will be created.

nr, ncint (optional)

Number of rows and columns. By default, nc = 1 and nr = -1: this will create as many rows as necessary, and a single column. By setting nr = 1 and nc = -1, it will create a single row and as many columns as necessary.

gsdict (optional)

A dictionary mapping Matplotlib’s GridSpec objects to the plots. The keys represent the cells of the layout. Each cell will host the associated plot. This represents the second mode of operation, as it allows to create more complicated layouts.

panel_kwdict (optional)

A dictionary of keyword arguments to be passed to panel’s GridSpec for further customization. Default to dict(sizing_mode=”stretch_width”). Refer to 1 for more information.

showboolean (optional)

It applies only to Matplotlib figures. Default to True.

Returns
figplt.Figure or pn.GridSpec

If all input plots are instances of MatplotlibBackend, than a Matplotlib Figure will be returned. Otherwise an instance of Holoviz Panel’s GridSpec will be returned.

References

1

https://panel.holoviz.org/reference/layouts/GridSpec.html

Examples

First mode of operation with instances of MatplotlibBackend:

from sympy import symbols, sin, cos, tan, exp, sqrt, Matrix, gamma
from spb.backends.matplotlib import MB
from spb import *

x, y, z = symbols("x, y, z")
p1 = plot(sin(x), backend=MB, show=False)
p2 = plot(tan(x), backend=MB, detect_poles=True, show=False)
p3 = plot(exp(-x), backend=MB, show=False)
fig = plotgrid(p1, p2, p3)

First mode of operation with different backends. Try this on a Jupyter Notebook. Note:

  1. the output of plotgrid is not captured into a variable. It is captured and rendered by Jupyter Notebook.

  2. Matplotlib has been integrated as a picture, thus it loses its interactivity.

p1 = plot(sin(x), backend=MB, show=False)
p2 = plot(tan(x), backend=MB, detect_poles=True, show=False)
p3 = plot(exp(-x), backend=MB, show=False)
plotgrid(p1, p2, p3, nr=1, nc=3,
     panel_kw=dict(sizing_mode="stretch_width", height=250))

Second mode of operation, using Matplotlib GridSpec:

from matplotlib.gridspec import GridSpec

p1 = plot(sin(x), cos(x), show=False, backend=MB)
p2 = plot_contour(cos(x**2 + y**2), (x, -3, 3), (y, -3, 3), show=False, backend=BB)
p3 = plot_complex(sqrt(x), show=False, backend=PB)
p4 = plot_vector(Matrix([-y, x]), (x, -5, 5), (y, -5, 5), show=False, backend=MB)
p5 = plot_complex(gamma(z), (z, -3-3*I, 3+3*I), show=False, backend=MB)

gs = GridSpec(3, 3)
mapping = {
    gs[0, :1]: p1,
    gs[1, :1]: p2,
    gs[2:, :1]: p3,
    gs[2:, 1:]: p4,
    gs[0:2, 1:]: p5,
}
plotgrid(gs=mapping)