space
|
Страница в процессе перевода. |
Перед отображением данные каждого графика проходят ряд преобразований. В Makie они делятся на три группы — конвертации, которые нормализуют типы, принадлежащие графику преобразования, которые трансформируют данные, и принадлежащие сцене проекции, которые перемещают данные между системами координат. (Здесь блоки типа Axis можно считать аналогами сцен. Каждый из них заключает сцену в оболочку и в той или иной степени управляет ею и ее проекциями напрямую.)
Атрибут space объявляет, в какой системе координат находится график относительно проекций. Таким образом, можно изменять проекции, применяемые к графику, не создавая новую сцену. Для выполнения этой задачи доступны следующие параметры.
-
space = :data: график находится в пространстве, определяемом камерой сцен, и использует ее матрицы представления и проекции. -
space = :pixel: график отображается в единицах пикселей и проецируется на область просмотра сцен. -
space = :relative: график представляет собой нормализованное пространство 0…1. -
space = :clip: график представляет собой нормализованное пространство --1..1.
using CairoMakie
using GLMakie
f = Figure()
a = Axis(f[1, 1], limits = (-10, 10, -10, 10),
xminorgridvisible = true, xminorticksvisible = true, xminorticks = IntervalsBetween(5),
yminorgridvisible = true, yminorticksvisible = true, yminorticks = IntervalsBetween(5))
text_kwargs = (align = (:left, :center), offset = (10, 0))
# по умолчанию
scatter!(a, Point2f(4, 5), space = :data)
text!(a, Point2f(4, 5), text = "(4, 5) in world space", space = :data; text_kwargs...)
scatter!(a, Point2f(50, 50), space = :pixel)
text!(a, Point2f(50, 50), text = "(50, 50) in pixel space", space = :pixel; text_kwargs...)
scatter!(a, Point2f(0.3, 0.8), space = :relative)
text!(a, Point2f(0.3, 0.8), text = "(0.3, 0.8) in relative space", space = :relative; text_kwargs...)
scatter!(a, Point2f(0, 0.1), space = :clip)
text!(a, Point2f(0, 0.1), text = "(0, 0.1) in clip space", space = :clip; text_kwargs...)
f
пространство маркеров
Некоторые графики также позволяют задавать markerspace. В таких случаях проекции делятся на два этапа. Первые строят аргументы от space до markerspace. Там проецируемые аргументы объединяются с другими данными. Например, в графике рассеяния каждая проецируемая позиция расширяется до квадрата, размер, положение и ориентация которого основаны на атрибутах markersize, marker_offset и rotation. Затем результат продолжает проецироваться по мере необходимости. markerspace позволяет выбрать применимые атрибуты системы координат, такие как markersize и т. д. Используются те же параметры, что и для space.
using CairoMakie
using GLMakie
f = Figure()
a = Axis(f[1, 1], limits = (-10, 10, -10, 10),
xminorgridvisible = true, xminorticksvisible = true, xminorticks = IntervalsBetween(5),
yminorgridvisible = true, yminorticksvisible = true, yminorticks = IntervalsBetween(5))
text_kwargs = (align = (:left, :center), offset = (10, 0))
# по умолчанию для графика рассеяния пространство маркеров равно :pixel
# маркер = круг заполняет весь квадрат markersize^2
scatter!(a, Point2f(-7, 7), markerspace = :pixel, markersize = 20, marker = Circle)
text!(a, Point2f(-7, 7), text = "pixel space w/ markersize = 20"; text_kwargs...)
scatter!(a, Point2f(-7, 2), markerspace = :clip, markersize = 0.2, marker = Circle)
text!(a, Point2f(-7, 2), text = "clip space w/ markersize = 0.2"; text_kwargs...)
scatter!(a, Point2f(-7, -2), markerspace = :relative, markersize = 0.2, marker = Circle)
text!(a, Point2f(-7, -2), text = "relative space w/ markersize = 0.2"; text_kwargs...)
scatter!(a, Point2f(-7, -7), markerspace = :data, markersize = 2, marker = Circle)
text!(a, Point2f(-7, -7), text = "world space w/ markersize = 2"; text_kwargs...)
f