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

text

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

text(positions; text, kwargs...)
text(x, y; text, kwargs...)
text(x, y, z; text, kwargs...)

Выводит один или несколько фрагментов текста, переданных через именованный аргумент text. Text использует типаж конвертации PointBased.

Тип графика

Псевдоним типа графика для функции text — Text.

Пространство маркеров — пиксели

По умолчанию текст строится с помощью markerspace = :pixel, что означает, что размер текста интерпретируется в пикселях. (Пространство позиции текста определяется атрибутом space.)

Ограничивающий прямоугольник текста при использовании markerspace = :pixel будет включать все точки данных или все точки привязки текста, но не сам текст, поскольку его размер зависит от текущей проекции оси, в которой он находится. Это также означает, что autolimits! может обрезать текст, поскольку глифы не имеют значимого размера в координатах данных (размер не зависит от уровня масштабирования), и вам придется вручную размещать текст или устанавливать ограничения данных так, чтобы он был полностью виден.

Можно построить либо одну строку с одной позицией, либо вектор строк с вектором позиций.

using CairoMakie
f = Figure()

Axis(f[1, 1], aspect = DataAspect(), backgroundcolor = :gray50)

scatter!(Point2f(0, 0))
text!(0, 0, text = "center", align = (:center, :center))

circlepoints = [(cos(a), sin(a)) for a in LinRange(0, 2pi, 16)[1:end-1]]
scatter!(circlepoints)
text!(
    circlepoints,
    text = "this is point " .* string.(1:15),
    rotation = LinRange(0, 2pi, 16)[1:end-1],
    align = (:right, :baseline),
    color = cgrad(:Spectral)[LinRange(0, 1, 15)]
)

f
c2c8a6f

Пространство маркеров — данные

Для текста, измерения которого имеют смысл в пространстве данных, задайте markerspace = :data. Это означает, что ограничивающий прямоугольник текста в координатах данных будет включать каждый глиф.

using CairoMakie
f = Figure()
LScene(f[1, 1])

text!(
    [Point3f(0, 0, i/2) for i in 1:7],
    text = fill("Makie", 7),
    rotation = [i / 7 * 1.5pi for i in 1:7],
    color = [cgrad(:viridis)[x] for x in LinRange(0, 1, 7)],
    align = (:left, :baseline),
    fontsize = 1,
    markerspace = :data
)

f
ac5cf59

Выравнивание по главной оси

Текст может быть выровнен по горизонтали с помощью :left, :center, :right и по вертикали с помощью :bottom, :baseline, :center, :top.

using CairoMakie
aligns = [(h, v) for v in [:bottom, :baseline, :center, :top]
                 for h in [:left, :center, :right]]
x = repeat(1:3, 4)
y = repeat(1:4, inner = 3)
scatter(x, y)
text!(x, y, text = string.(aligns), align = aligns)
current_figure()
b584b1b

Выравнивание по поперечной оси

По умолчанию выравнивание многострочного текста по поперечной оси следует за выравниванием по главной оси. Текст, выровненный по левому краю главной оси, также выравнивается по левому краю поперечной оси. Это поведение можно переопределить с помощью атрибута justification.

using CairoMakie
scene = Scene(camera = campixel!, size = (800, 800))

points = [Point(x, y) .* 200 for x in 1:3 for y in 1:3]
scatter!(scene, points, marker = :circle, markersize = 10px)

symbols = (:left, :center, :right)

for ((justification, halign), point) in zip(Iterators.product(symbols, symbols), points)

    t = text!(scene,
        point,
        text = "a\nshort\nparagraph",
        color = (:black, 0.5),
        align = (halign, :center),
        justification = justification)

    bb = boundingbox(t, :pixel)
    wireframe!(scene, bb, color = (:red, 0.2))
end

for (p, al) in zip(points[3:3:end], (:left, :center, :right))
    text!(scene, p .+ (0, 80), text = "align :" * string(al),
        align = (:center, :baseline))
end

for (p, al) in zip(points[7:9], (:left, :center, :right))
    text!(scene, p .+ (80, 0), text = "justification\n:" * string(al),
        align = (:center, :top), rotation = pi/2)
end

scene
de12d2d

Смещение

Атрибут смещения можно использовать для смещения текста относительно его позиции. Это особенно удобно при использовании space = :pixel, например для размещения текста вместе с гистограммами. Можно указать конец гистограммы в координатах данных, а затем сместить текст немного влево.

using CairoMakie
f = Figure()

horsepower = [52, 78, 80, 112, 140]
cars = ["Kia", "Mini", "Honda", "Mercedes", "Ferrari"]

ax = Axis(f[1, 1], xlabel = "horse power")
tightlimits!(ax, Left())
hideydecorations!(ax)

barplot!(horsepower, direction = :x)
text!(Point.(horsepower, 1:5), text = cars, align = (:right, :center),
    offset = (-20, 0), color = :white)

f
85db4de

Относительное пространство

По умолчанию для text задано space = :data, что означает, что конечное положение зависит от ограничений и масштабирования оси. Однако бывает полезно разместить текст относительно самой оси независимо от масштаба. При space = :relative позиция (0, 0) относится к левому нижнему углу, а (1, 1) — к правому верхнему углу Scene, в котором находится объект графика (для Axis это эквивалентно области построения, которая реализуется с помощью Scene).

Распространенным сценарием является размещение меток внутри осей:

using CairoMakie
f = Figure()

ax1 = Axis(f[1, 1], limits = (1, 2, 3, 4))
ax2 = Axis(f[1, 2], width = 300, limits = (5, 6, 7, 8))
ax3 = Axis(f[2, 1:2], limits = (9, 10, 11, 12))

for (ax, label) in zip([ax1, ax2, ax3], ["A", "B", "C"])
    text!(
        ax, 0, 1,
        text = label,
        font = :bold,
        align = (:left, :top),
        offset = (4, -2),
        space = :relative,
        fontsize = 24
    )
end

f
7185abc

MathTeX

Makie может отрисовывать строки LaTeX из пакета LaTeXStrings.jl с использованием MathTeXEngine.jl.

using CairoMakie
lines(0.5..20, x -> sin(x) / sqrt(x), color = :black)
text!(7, 0.38, text = L"\frac{\sin(x)}{\sqrt{x}}", color = :black)
current_figure()
9259a7b

L-строки можно передавать во многие объекты, использующие текст, например в качестве меток в условных обозначениях.

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

lines!(0..10, x -> sin(3x) / (cos(x) + 2),
    label = L"\frac{\sin(3x)}{\cos(x) + 2}")
lines!(0..10, x -> sin(x^2) / (cos(sqrt(x)) + 2),
    label = L"\frac{\sin(x^2)}{\cos(\sqrt{x}) + 2}")

Legend(f[1, 2], ax)

f
a1f1beb

Форматированный текст

Используя форматированный текст можно строить текст, части которого имеют разные цвета или шрифты, а также располагать разделы в виде нижних и верхних индексов. Подобные объекты форматированного текста можно создавать с помощью функций rich, superscript, subscript, subsup и left_subsup, каждая из которых создает объекты RichText.

Каждая из этих функций принимает переменное количество аргументов (кроме subsup и left_subsup, которые принимают ровно два аргумента), каждый из которых может быть String или RichText. Каждая из них также может принимать именованные аргументы, такие как color или font, чтобы задать эти атрибуты для данной части. Настройки верхнего уровня для шрифта, цвета и т. д., как обычно, берутся из атрибутов text.

using CairoMakie
f = Figure(fontsize = 30)
Label(
    f[1, 1],
    rich(
        "H", subscript("2"), "O is the formula for ",
        rich("water", color = :cornflowerblue, font = :italic)
    )
)

str = "A BEAUTIFUL RAINBOW"
rainbow = cgrad(:rainbow, length(str), categorical = true)
fontsizes = 30 .+ 10 .* sin.(range(0, 3pi, length = length(str)))

rainbow_chars = map(enumerate(str)) do (i, c)
    rich("$c", color = rainbow[i], fontsize = fontsizes[i])
end

Label(f[2, 1], rich(rainbow_chars...), font = :bold)

Label(f[3, 1], rich("Chemists use notations like ", left_subsup("92", "238"), "U or PO", subsup("4", "3−")))

f
b6ef611

Настройка смещений

Иногда при использовании обычного и курсивного шрифтов рядом друг с другом промежутки между глифами получаются слишком узкими или слишком широкими. Сдвинуть глифы на величину, пропорциональную размеру шрифта, можно с помощью значения offset для форматированного текста.

using CairoMakie
f = Figure(fontsize = 30)
Label(
    f[1, 1],
    rich(
        "ITALIC",
        superscript("Regular without x offset", font = :regular),
        font = :italic
    )
)

Label(
    f[2, 1],
    rich(
        "ITALIC",
        superscript("Regular with x offset", font = :regular, offset = (0.15, 0)),
        font = :italic
    )
)

f
4d95d13

Атрибуты

align

Значение по умолчанию: (:left, :bottom)
задает выравнивание строки относительно position. Возможные значения: :left, :center, :right, :top, :bottom, :baseline или дробное значение.

alpha

Значение по умолчанию: 1.0
альфа-значение цветовой карты или атрибута цвета. Несколько альфа-значений, как в plot(alpha=0.2, color=(:red, 0.5), перемножаются.

clip_planes

Значение по умолчанию: automatic
плоскости отсечения позволяют выполнять отсечение в трехмерном пространстве. Здесь можно указать вектор из 8 плоскостей Plane3f, за которыми графики будут отсечены (т. е. станут невидимыми). По умолчанию плоскости отсечения наследуются от родительского графика или сцены. Чтобы удалить родительский объект clip_planes, передайте Plane3f[].

color

Значение по умолчанию: @inherit textcolor
задает цвет текста. Можно задать отдельный цвет для каждого глифа, передав Vector{<:Colorant}, или один цвет для всего текста. Если цвет представляет собой вектор чисел, аргументы цветовой карты используются для сопоставления чисел с цветами.

colormap

Значение по умолчанию: @inherit colormap :viridis
задает цветовую карту, из которой производится выборка для числовых значений color. Также можно использовать PlotUtils.cgrad(...), Makie.Reverse(any_colormap) или любой символ из ColorBrewer или PlotUtils. Чтобы увидеть все доступные цветовые градиенты, можно вызвать Makie.available_gradients().

colorrange

Значение по умолчанию: automatic
значения, представляющие начальную и конечную точки colormap.

colorscale

Значение по умолчанию: identity
функция преобразования цвета. Может быть любой функцией, но с Colorbar хорошо работают только identity, log, log2, log10, sqrt, logit, Makie.pseudolog10 и Makie.Symlog10.

depth_shift

Значение по умолчанию: 0.0
корректирует значение глубины графика после всех остальных преобразований, т. е. в пространстве отсечения, где 0 <= depth <= 1. Применимо только к GLMakie и WGLMakie и может использоваться для настройки порядка отрисовки (настраиваемая перерисовка).

font

Значение по умолчанию: @inherit font
задает шрифт. Это может быть символ Symbol, который будет искаться в словаре fonts, или строка String с именем шрифта (либо его частью) или путем к файлу шрифта.

fonts

Значение по умолчанию: @inherit fonts
используется в качестве словаря для поиска шрифтов, указанных в Symbol, например :regular, :bold или :italic.

fontsize

Значение по умолчанию: @inherit fontsize
размер шрифта в единицах в зависимости от markerspace.

fxaa

Значение по умолчанию: false
определяет то, будет ли график отрисовываться с помощью fxaa (сглаживание, только GLMakie).

glowcolor

Значение по умолчанию: (:black, 0.0)
задает цвет эффекта свечения вокруг текста.

glowwidth

Значение по умолчанию: 0.0
задает размер эффекта свечения вокруг текста.

highclip

Значение по умолчанию: automatic
цвет для любого значения выше цветового диапазона.

inspectable

Значение по умолчанию: true
определяет, должен ли график проверяться с помощью DataInspector.

inspector_clear

Значение по умолчанию: automatic
задает функцию обратного вызова (inspector, plot) -> ... для очистки пользовательских индикаторов в DataInspector.

inspector_hover

Значение по умолчанию: automatic
задает функцию обратного вызова (inspector, plot, index) -> ..., которая заменяет методы show_data по умолчанию.

inspector_label

Значение по умолчанию: automatic
задает функцию обратного вызова (plot, index, position) -> string, которая заменяет метку по умолчанию, сгенерированную DataInspector.

justification

Значение по умолчанию: automatic
задает выравнивание текста относительно ограничивающего прямоугольника. Возможные значения: :left, :center, :right или дробное значение. По умолчанию используется выравнивание по горизонтали в align.

lineheight

Значение по умолчанию: 1.0
множитель высоты строки.

lowclip

Значение по умолчанию: automatic
цвет для любого значения ниже цветового диапазона.

markerspace

Значение по умолчанию: :pixel
задает пространство, в котором действует fontsize. Возможные входные данные см. в описании Makie.spaces().

model

Значение по умолчанию: automatic
задает модельную матрицу для графика. Переопределяет настройки, выполненные с помощью translate!, rotate! и scale!.

nan_color

Значение по умолчанию: :transparent
цвет для значений NaN.

offset

Значение по умолчанию: (0.0, 0.0)
смещение текста от заданной позиции в единицах markerspace.

overdraw

Значение по умолчанию: false
определяет то, будет ли график отрисовываться поверх других графиков. В частности, это означает игнорирование проверок глубины в бэкендах GL.

position

Значение по умолчанию: (0.0, 0.0)
устарело: задает положение текста. Используйте вместо этого позиционный аргумент text.

rotation

Значение по умолчанию: 0.0
поворачивает текст вокруг заданной позиции.

space

Значение по умолчанию: :data
задает пространство преобразования для прямоугольника, охватывающего график. Возможные входные данные см. в описании Makie.spaces().

ssao

Значение по умолчанию: false
определяет то, будет ли график отрисовываться с использованием ssao (преграждение окружающего света в экранном пространстве). Обратите внимание, что это имеет смысл только для трехмерных графиков и применимо только с fxaa = true.

strokecolor

Значение по умолчанию: (:black, 0.0)
задает цвет контура вокруг маркера.

strokewidth

Значение по умолчанию: 0
задает толщину контура вокруг маркера.

text

Значение по умолчанию: ""
задает один фрагмент или вектор фрагментов текстов для отображения; число фрагментов должно соответствовать указанному числу позиций. Makie поддерживает тип String, который используется для обычного текста, и LaTeXString для построения математических выражений с помощью MathTeXEngine.jl.

transform_marker

Значение по умолчанию: false
определяет то, применяется ли модельная матрица (без преобразования) к самому глифу, а не только к позициям. (При значении true функции scale! и rotate! влияют на глифы текста.)

transformation

Значение по умолчанию: automatic
документация недоступна.

transparency

Значение по умолчанию: false
определяет то, как реализуется прозрачность графика. В GLMakie transparency = true приводит к использованию прозрачности, независимой от порядка.

visible

Значение по умолчанию: true
определяет то, будет ли отрисовываться график.

word_wrap_width

Значение по умолчанию: -1
задает предельную ширину строки для текста. Если слово превышает этот предел, перед ним вставляется символ новой строки. При отрицательных значениях перенос по словам отключается.