Документация Engee

Построение прямоугольников вокруг подрисунков

Страница в процессе перевода.

Чтобы показать, что несколько элементов в Figure принадлежат друг другу, их можно поместить в контейнер. Нужно просто использовать вложенный блок GridLayout для каждой группы объектов и поместить Box в ту же позицию, что и этот блок GridLayout. Тогда при использовании режима alignmode = Outside(some_padding) объекты с выступами, такие как Axis, будут полностью находиться в охватывающих прямоугольниках.

using CairoMakie
f = Figure()

g1 = GridLayout(f[1, 1], alignmode = Outside(15))
g2 = GridLayout(f[1, 2], alignmode = Outside(15))
box1 = Box(f[1, 1], cornerradius = 10, color = (:tomato, 0.5), strokecolor = :transparent)
box2 = Box(f[1, 2], cornerradius = 10, color = (:teal, 0.5), strokecolor = :transparent)

# переместим прямоугольники на задний план, чтобы фоновые многоугольники блока Axis находились перед ними
Makie.translate!(box1.blockscene, 0, 0, -100)
Makie.translate!(box2.blockscene, 0, 0, -100)

Axis(g1[1, 1], backgroundcolor = :white)
Axis(g1[2, 1], backgroundcolor = :white)

Axis(g2[1, 1], backgroundcolor = :white)
Axis(g2[1, 2], backgroundcolor = :white)
Axis(g2[2, 1:2], backgroundcolor = :white)

Label(f[0, :], "Two boxes indicate groups of axes that belong together")

f
65ab7dc

В других ситуациях можно просто обвести части существующего макета, не изменяя его. Используйте сторону Outer, чтобы выровнять прямоугольники по внешнему краю соседних объектов, и небольшое отрицательное значение Outside(...) (подходящие отступы нужно подобрать экспериментальным путем).

using CairoMakie
f = Figure()

for i in 1:3, j in 1:4
    Axis(f[i, j], title = "$i & $j")
    lines!(cumsum(randn(100)), color = :gray80)
end

b = Box(
    f[1:2, 1:3, Makie.GridLayoutBase.Outer()],
    alignmode = Outside(-5, -12, -8, -5),
    cornerradius = 4,
    color = (:tomato, 0.1),
    strokecolor = :tomato,
    strokewidth = 2,
)
translate!(b.blockscene, 0, 0, -200)

b2 = Box(
    f[2:3, 3:4, Makie.GridLayoutBase.Outer()],
    alignmode = Outside(-5, -12, -8, -5),
    cornerradius = 4,
    color = (:teal, 0.1),
    strokecolor = :teal,
    strokewidth = 2,
)
translate!(b2.blockscene, 0, 0, -200)

Legend(
    f[end+1, :],
    [LineElement(color = :tomato), LineElement(color = :teal)],
    ["Group 1", "Group 2"],
    framevisible = false,
    orientation = :horizontal)
f
57f0cf4