text
|
Страница в процессе перевода. |
#
MakieCore.text — Function
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
Пространство маркеров — данные
Для текста, измерения которого имеют смысл в пространстве данных, задайте 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
Выравнивание по главной оси
Текст может быть выровнен по горизонтали с помощью :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()
Выравнивание по поперечной оси
По умолчанию выравнивание многострочного текста по поперечной оси следует за выравниванием по главной оси. Текст, выровненный по левому краю главной оси, также выравнивается по левому краю поперечной оси. Это поведение можно переопределить с помощью атрибута 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
Смещение
Атрибут смещения можно использовать для смещения текста относительно его позиции. Это особенно удобно при использовании 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
Относительное пространство
По умолчанию для 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
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()
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
Форматированный текст
Используя форматированный текст можно строить текст, части которого имеют разные цвета или шрифты, а также располагать разделы в виде нижних и верхних индексов. Подобные объекты форматированного текста можно создавать с помощью функций 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
Настройка смещений
Иногда при использовании обычного и курсивного шрифтов рядом друг с другом промежутки между глифами получаются слишком узкими или слишком широкими. Сдвинуть глифы на величину, пропорциональную размеру шрифта, можно с помощью значения 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
Атрибуты
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).
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.
markerspace
Значение по умолчанию: :pixel
задает пространство, в котором действует fontsize. Возможные входные данные см. в описании Makie.spaces().
model
Значение по умолчанию: automatic
задает модельную матрицу для графика. Переопределяет настройки, выполненные с помощью translate!, rotate! и scale!.
offset
Значение по умолчанию: (0.0, 0.0)
смещение текста от заданной позиции в единицах markerspace.
overdraw
Значение по умолчанию: false
определяет то, будет ли график отрисовываться поверх других графиков. В частности, это означает игнорирование проверок глубины в бэкендах GL.
position
Значение по умолчанию: (0.0, 0.0)
устарело: задает положение текста. Используйте вместо этого позиционный аргумент text.
space
Значение по умолчанию: :data
задает пространство преобразования для прямоугольника, охватывающего график. Возможные входные данные см. в описании Makie.spaces().
ssao
Значение по умолчанию: false
определяет то, будет ли график отрисовываться с использованием ssao (преграждение окружающего света в экранном пространстве). Обратите внимание, что это имеет смысл только для трехмерных графиков и применимо только с fxaa = true.
text
Значение по умолчанию: ""
задает один фрагмент или вектор фрагментов текстов для отображения; число фрагментов должно соответствовать указанному числу позиций. Makie поддерживает тип String, который используется для обычного текста, и LaTeXString для построения математических выражений с помощью MathTeXEngine.jl.
transform_marker
Значение по умолчанию: false
определяет то, применяется ли модельная матрица (без преобразования) к самому глифу, а не только к позициям. (При значении true функции scale! и rotate! влияют на глифы текста.)