Построение прямоугольников вокруг подрисунков
|
Страница в процессе перевода. |
Чтобы показать, что несколько элементов в 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
В других ситуациях можно просто обвести части существующего макета, не изменяя его. Используйте сторону 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