Blocks are objects which can be added to a Figure or Scene and have their location and size controlled by a GridLayout. In of itself, a Block is an abstract type. A Figure has its own internal GridLayout and therefore offers simplified syntax for adding blocks to it. If you want to work with a bare Scene, you can attach a GridLayout to its pixel area.


A layout only controls an object's position or bounding box. A Block can be controlled by the GridLayout of a Figure but not be added as a visual to the Figure. A Block can also be added to a Scene without being inside any GridLayout, if you specify the bounding box yourself.

Adding to a Figure

Here's one way to add a Block, in this case an Axis, to a Figure.

using CairoMakie

f = Figure()
ax = Axis(f[1, 1])

Specifying a boundingbox directly

Sometimes you just want to place a Block in a specific location, without it being controlled by a dynamic layout. You can do this by setting the bbox parameter, which is usually controlled by the layout, manually. The boundingbox should be a 2D Rect, and can also be an Observable if you plan to change it dynamically. The function BBox creates an Rect2f, but instead of passing origin and widths, you pass left, right, bottom and top boundaries directly.

Here's an example where two axes are placed manually:

using CairoMakie

f = Figure()
Axis(f, bbox = BBox(100, 300, 100, 500), title = "Axis 1")
Axis(f, bbox = BBox(400, 700, 200, 400), title = "Axis 2")

Deleting blocks

To remove blocks from their layout and the figure or scene, use delete!(block).