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

CairoMakie

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

CairoMakie использует Cairo.jl для рисования векторной графики в SVG и PDF. Этот бэкенд следует использовать, если нужно получить графики наивысшего качества для публикации, так как процесс отрисовки в бэкендах GL основан на растровых изображениях и ориентирован больше на скорость, чем на точность пикселей.

Активация и настройка экрана

Чтобы активировать бэкенд, вызовите CairoMakie.activate!() со следующими параметрами.

CairoMakie.activate!(; screen_config...)

Устанавливает CairoMakie в качестве текущего активного бэкенда, а также позволяет быстро задать screen_config. Обратите внимание, что screen_config также можно задать на постоянной основе с помощью Makie.set_theme!(CairoMakie=(screen_config...,)).

Аргументы, которые можно передавать через screen_config:

  • px_per_unit = 2.0

  • pt_per_unit = 0.75

  • antialias::Union{Symbol, Int} = :best: метод сглаживания, используемый Cairo для рисования. Возможные значения: [:best => Cairo.ANTIALIAS_BEST, :good => Cairo.ANTIALIAS_GOOD, :subpixel => Cairo.ANTIALIAS_SUBPIXEL, :none => Cairo.ANTIALIAS_NONE].

  • visible::Bool: при значении true отрисовываемые выходные данные открываются в браузере или средстве просмотра изображений.

  • pdf_version::String = nothing: версия выходных файлов PDF. Возможные значения: "1.4", "1.5", "1.6", "1.7" или nothing (в этом случае ограничений на версию PDF нет).

Тип встроенного графика

Вы можете выбрать тип графика, который будет отображаться как встроенный, например, в VSCode, Pluto.jl или любой другой среде, задав его с помощью функции activate!.

CairoMakie.activate!(type = "png")
CairoMakie.activate!(type = "svg")

Z-порядок

CairoMakie является двухмерным бэкендом, поэтому в нем не реализована концепция z-отсечения и трехмерные возможности весьма ограничены. Значения z трехмерных графиков не действуют и проецируются на плоскость холста. Z-слои аппроксимируются путем сортировки всех объектов графика по значению их перемещения по оси z перед отрисовкой, затем по родительской сцене и, наконец, по порядку вставки. Поэтому, если нужно нарисовать какой-либо объект поверх другого, но он оказывается ниже, попробуйте переместить его вперед с помощью translate!(obj, 0, 0, some_positive_z_value).

Выборочная растеризация

Задав атрибут rasterize графика, можно сообщить CairoMakie, что этот график необходимо растеризовать при сохранении, даже если он сохраняется в векторном бэкенде. Это может быть очень полезно для больших сеток, поверхностей или даже тепловых карт, если они расположены на нерегулярной сетке.

Допустим, у вас есть объект Plot plt. Вы можете установить plt.rasterize = true для простой растеризации либо установить plt.rasterize = scale::Int, где scale представляет коэффициент масштабирования для поверхности изображения.

Например, если размер сцены равен (800, 600), то при установке scale=2 растровое изображение, встроенное в векторную графику, будет иметь разрешение (1600, 1200).

Чтобы отключить эту растеризацию, установите plt.rasterize = false.

Пример:

using CairoMakie
v = rand(10,2)
scatter(v[:,1], v[:,2], rasterize = true, markersize = 30.0)
91f42b6

При увеличении масштаба изображение станет сильно пикселизированным. Это связано с тем, что плотность растеризации установлена на уровне 1 px на pt. Если задать rasterize=10, оно станет гораздо более гладким.

using CairoMakie
v = rand(10,2)
scatter(v[:,1], v[:,2], rasterize = 10, markersize = 30.0)
85ccdc8

Версия PDF

Версию выходных PDF-файлов можно ограничить с помощью аргумента pdf_version конфигурации экрана. Для удобства его также можно передать в качестве аргумента функции save.

using CairoMakie
fig = Figure()
save("figure.pdf", fig, pdf_version="1.4")