网格布局
|
该页面正在翻译中。 |
正确设置列和行大小
有四种不同类型的大小,你可以给行和列。
固定
固定(scene_units) 用于将列或行设置为绝对大小,与其内容无关。 这只有在列或行中存在可变宽度内容时才真正有意义,这些内容可以收缩或扩展以满足此大小。 你可能不需要 固定 尺寸经常。
</无翻译>
using CairoMakie
f = Figure()
Axis(f[1, 1], title = "My column has size Fixed(400)")
Axis(f[1, 2], title = "My column has size Auto()")
colsize!(f.layout, 1, Fixed(400))
# colsize!(f.layout, 1, 400) would also work
f
亲戚
相对(分数) 用于将列或行设置为可用宽度或高度的一定比例的大小。 这很有用,例如,如果您希望一列跨越可用宽度的50%,无论其他内容在那里。 在这种情况下,您将使用 亲属(1/2). 可用宽度是GridLayout的宽度减去包括突起的行或列间隙所占用的空间。
</无翻译>
using CairoMakie
f = Figure()
Axis(f[1, 1], title = "My column has size Relative(2/3)")
Axis(f[1, 2], title = "My column has size Auto()")
Colorbar(f[1, 3])
colsize!(f.layout, 1, Relative(2/3))
f
汽车
该 汽车 大小是有点更复杂的理解。 它有两个参数,布尔值 [医]特里德米娜 而数 比率. 默认值为 自动()==自动(真,1). 这也是默认的行高和列宽。
调整大小的列或行 自动(真) 尝试将自己的大小与其内容相适应。
当一个 网格布局 解决了,它查看每行或每列中的内容,并检查它是否报告固定大小。 许多对象可以报告自己的宽度或高度,因为它们的内容具有特定的大小,例如 标签. 其他对象通常与用户设置的宽度或高度一起使用,例如 Colorbar(场景,宽度=30). 在这种情况下, 网格布局 还可以看到colorbar具有30个单位的宽度,并将列宽度适合该值。 对象像 轴心,轴心 另一方面通常不设置为特定的尺寸。
只有跨越_single_行或列的对象分别报告其宽度或高度。 如果_multiple_行或列跨越,则没有很好地定义对象需要的空间应该如何分布。
如果有一个以上的对象具有固定的宽度或高度在一个 自动(真) 大小的列,使用最大尺寸。
如果列或行的大小 自动(错误),固定大小的对象被忽略。 当然,也可能发生这样的情况:行或列中没有固定大小的对象。 自动(真) 尺寸。 在这两种情况下,列或行通过毕竟保留的内容来确定它们的大小 固定, 亲戚, 方面 和尺寸-推断 自动(真) 已计算列或行。 各未确定 汽车 列获取与其成比例的剩余空间的份额 比率 参数。
例如,假设有两列未确定 汽车 300单位空间时的大小。 列1具有比率 1 而第2列有比率 2. 第一列将得到 1 / (1 + 2) * 300 == 100 单位,而第二列得到 2 / (1 + 2) * 300 == 200 单位。
</无翻译>
using CairoMakie
f = Figure()
Axis(f[1, 1], title = "My column infers my width\nof 200 units")
Axis(f[1, 2], title = "My column gets 1/3rd\nof the remaining space")
Axis(f[1, 3], title = "My column gets 2/3rds\nof the remaining space")
colsize!(f.layout, 2, Auto(1)) # equivalent to Auto(true, 1)
colsize!(f.layout, 3, Auto(2)) # equivalent to Auto(true, 2)
f
方面
这个尺寸也有点难以理解。 语法是 长宽(参考,比率). 宽度为 方面(1,2.0) 设置为第1行高度的2.0倍,无论该高度是多少。 因此,[1,1]处的网格单元将始终具有2比1的宽高比。 相反的模式适用于具有 方面 尺寸。
当您想要约束网格单元的宽高比时,宽高大小的列或行非常有用。 例如,一个总是应该是正方形的情节。 在布局级别比设置更好的情况下强制方面 轴心。方面=AxisAspect(1) 在大多数情况下,因为它确保了一个_intact layout_,其中所有网格单元边框都在视觉上对齐。 一个 轴心,轴心 与 方面=AxisAspect(1) 另一方面只是缩小,所以它保持正方形,但这会破坏与其他网格内容的对齐。
</无翻译>
using CairoMakie
f = Figure()
Axis(f[1, 1], title = "I'm square and aligned")
Box(f[1, 2], color = (:blue, 0.1), strokecolor = :transparent)
Axis(f[1, 2], aspect = AxisAspect(1),
title = "I'm square but break the layout.\nMy actual cell is the blue rect.")
Axis(f[2, 1])
Axis(f[2, 2])
rowsize!(f.layout, 2, Relative(2/3))
colsize!(f.layout, 1, Aspect(1, 1))
f
|
注意请记住,如果您对行和列大小设置了太多约束,则GridLayout很容易太大或太小。 如果您使用具有固定大小或固定宽高比的元素,则使用可变宽度元素来填充剩余空间是很好的。 |
嵌套
网格可以嵌套在其他网格内,依此类推,到任意深度。 顶部网格的父级应该是放置布局的场景。 当您将网格放置在另一个网格内时,该网格会自动成为其父网格。 默认情况下,网格内部也设置为alignmode,这意味着内容边缘与网格的边界框对齐,不包括外部突起。 这样,嵌套网格中的绘图就可以很好地沿着它们的样条对齐。 </无翻译>
using CairoMakie
f = Figure()
subgl_left = GridLayout()
subgl_left[1:2, 1:2] = [Axis(f) for i in 1:2, j in 1:2]
subgl_right = GridLayout()
subgl_right[1:3, 1] = [Axis(f) for i in 1:3]
f.layout[1, 1] = subgl_left
f.layout[1, 2] = subgl_right
f
对齐方式
在这里,您可以看到带有和不带边距的外部对齐模式与内部对齐模式之间的区别。 只有标准的内部模式才能很好地对齐包含轴的轴棘。 外部模式主要用于主GridLayout,以便在窗口边缘和绘图之间留出一些空间。 您可以看到法线轴看起来与放置在网格内部的内对齐轴相同,并且它们都有效地对齐完全相同。 </无翻译>
using CairoMakie
f = Figure(size = (800, 800))
Axis(f[1, 1], title = "No grid layout")
Axis(f[2, 1], title = "No grid layout")
Axis(f[3, 1], title = "No grid layout")
Axis(f[1, 2], title = "Inside", alignmode = Inside())
Axis(f[2, 2], title = "Outside", alignmode = Outside())
Axis(f[3, 2], title = "Outside(50)", alignmode = Outside(50))
[Box(f[i, 2], color = :transparent, strokecolor = :red) for i in 1:3]
f
通过索引添加行和列
using CairoMakie
f = Figure(size = (800, 800))
Axis(f[1, 1])
for i in 1:3
Axis(f[:, end+1])
Axis(f[end+1, :])
end
Label(f[0, :], text = "Super Title", fontsize = 50)
Label(f[end+1, :], text = "Sub Title", fontsize = 50)
Label(f[1:end-1, 0], text = "Left Text", fontsize = 50,
rotation = pi/2)
Label(f[1:end-1, end+1], text = "Right Text", fontsize = 50,
rotation = -pi/2)
f
如果您的行从1到3,并索引到行0,则行现在的范围从0到3。 如果然后索引到行-1,则行的范围从-1到3,依此类推。 自GridLayoutBase以来,此行为已更改。jl v0.7.0.
</无翻译>
using CairoMakie
f = Figure(size = (800, 800))
for i in 1:3, j in 1:3
Axis(f[i, j])
end
Label(f[0, :], text = "First Supertitle", fontsize = 20)
Label(f[-1, :], text = "Second Supertitle", fontsize = 30)
Label(f[-2, :], text = "Third Supertitle", fontsize = 40)
f