lets_plot.gggrid(plots: list, ncol: int | None = None, *, sharex: str | None = None, sharey: str | None = None, widths: list | None = None, heights: list | None = None, hspace: float | None = None, vspace: float | None = None, fit: bool | None = None, align: bool | None = None)#

Combine several plots on one figure, organized in a regular grid.


A list where each element is a plot specification, a subplots specification, or None. Use value None to fill-in empty cells in grid.


Number of columns in grid. If not specified, shows plots horizontally, in one row.

sharex, shareybool or str, default=False

Controls sharing of axis limits between subplots in the grid.

  • ‘all’/True - share limits between all subplots.

  • ‘none’/False - do not share limits between subplots.

  • ‘row’ - share limits between subplots in the same row.

  • ‘col’ - share limits between subplots in the same column.

widthslist of numbers

Relative width of each column of grid, left to right.

heightslist of numbers

Relative height of each row of grid, top-down.

hspacefloat, default=4.0

Cell horizontal spacing in px.

vspacefloat, default=4.0

Cell vertical spacing in px.

fitbool, default=True

Whether to stretch each plot to match the aspect ratio of its cell (fit=True), or to preserve the original aspect ratio of plots (fit=False).

alignbool, default=False

If True, align inner areas (i.e. “geom” bounds) of plots. However, cells containing other (sub)grids are not participating in the plot “inner areas” layouting.


The grid specification.


 1import numpy as np
 2from lets_plot import *
 5n = 100
 6x = np.arange(n)
 7y = np.random.normal(size=n)
 8w, h = 200, 150
 9p = ggplot({'x': x, 'y': y}, aes(x='x', y='y')) + ggsize(w, h)
11    gggrid([p+geom_point(), p+geom_histogram(bins=3)]),
12    p+geom_line()
14gggrid(plot_list, ncol=1) + ggsize(400, 300)