First steps 6: Combining plots#

In the previous first steps guides, you created individual plots.

In this section, you will combine several plots into different kinds of layouts.

Creating rows, columns, and grids#

The easiest way to combine individual plots is to assign them to rows or columns.

For example:

To combine several plots into a horizontal row layout, you first need to import row. Then use the row() function when calling show():

from bokeh.layouts import row
from bokeh.plotting import figure, show

# prepare some data
x = list(range(11))
y0 = x
y1 = [10 - i for i in x]
y2 = [abs(i - 5) for i in x]

# create three plots with one renderer each
s1 = figure(width=250, height=250, background_fill_color="#fafafa")
s1.scatter(x, y0, marker="circle", size=12, color="#53777a", alpha=0.8)

s2 = figure(width=250, height=250, background_fill_color="#fafafa")
s2.scatter(x, y1, marker="triangle", size=12, color="#c02942", alpha=0.8)

s3 = figure(width=250, height=250, background_fill_color="#fafafa")
s3.scatter(x, y2, marker="square", size=12, color="#d95b43", alpha=0.8)

# put the results in a row and show
show(row(s1, s2, s3))

To display several plots in a vertical column layout, use the column() function instead.

A more flexible way to arrange elements in Bokeh is to use the gridplot() function.

See also

For more information on row(), column(), and gridplot(), see Grids and layouts in the user guide.

Defining sizing behavior#

You can use the functions row(), column(), and gridplot() with additional arguments to define how Bokeh scales the individual plots. See sizing_mode for a list of all sizing modes that Bokeh supports.

For example: To make all plots in a row responsively fill the available width of the browser window, assign scale_width to sizing_mode:

from bokeh.layouts import row
from bokeh.plotting import figure, show

# prepare some data
x = list(range(11))
y0 = x
y1 = [10 - i for i in x]
y2 = [abs(i - 5) for i in x]

# create three plots with one renderer each
s1 = figure(width=250, height=250, background_fill_color="#fafafa")
s1.scatter(x, y0, marker="circle", size=12, color="#53777a", alpha=0.8)

s2 = figure(width=250, height=250, background_fill_color="#fafafa")
s2.scatter(x, y1, marker="triangle", size=12, color="#c02942", alpha=0.8)

s3 = figure(width=250, height=250, background_fill_color="#fafafa")
s3.scatter(x, y2, marker="square", size=12, color="#d95b43", alpha=0.8)

# put the results in a row that automatically adjusts
# to the browser window's width
show(row(children=[s1, s2, s3], sizing_mode="scale_width"))

See also

For more information on sizing modes, see Sizing modes in the user guide.