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

heatmap

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

heatmap(x, y, matrix)
heatmap(x, y, func)
heatmap(matrix)
heatmap(xvector, yvector, zvector)

Строит тепловую карту в виде коллекции прямоугольников. x и y могут иметь длину i и j, где (i, j) равно size(matrix). В этом случае прямоугольники будут размещаться вокруг этих точек сетки как ячейки Вороного. Обратите внимание, что для x и y с неравномерными интервалами задаваемые ими точки не центрируются внутри полученных прямоугольников.

x и y также могут иметь длину i+1 и j+1; в этом случае они интерпретируются как стороны прямоугольников.

Цвета прямоугольников берутся из matrix[i, j]. Третий аргумент также может быть функцией (Function) (i, j) -> v, которая затем вычисляется по сетке, охватываемой x и y.

Еще один допустимый вариант — использование трех векторов xvector, yvector и zvector. В этом случае предполагается, что ни одна пара элементов x и y не повторяется. Пары, отсутствующие в итоговой сетке, будут рассматриваться так, как если бы zvector имел элемент NaN в этой позиции.

Если x и y опущены в аргументе матрицы, по умолчанию они равны x, y = axes(matrix).

Обратите внимание, что heatmap отрисовывается медленнее, чем image, поэтому для больших равномерно распределенных сеток следует предпочесть image.

Тип графика

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

Примеры

Два вектора и матрица

В этом примере x и y задают точки, вокруг которых размещаются ячейки тепловой карты.

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

centers_x = 1:5
centers_y = 6:10
data = reshape(1:25, 5, 5)

heatmap!(ax, centers_x, centers_y, data)

scatter!(ax, [(x, y) for x in centers_x for y in centers_y], color=:white, strokecolor=:black, strokewidth=1)

f
5ed7cb0

Тот же подход работает и для неравномерно расположенных ячеек. Обратите внимание, что прямоугольники не центрированы вокруг точек, поскольку их границы расположены между соседними точками, как ячейки Вороного.

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

centers_x = [1, 2, 4, 7, 11]
centers_y = [6, 7, 9, 12, 16]
data = reshape(1:25, 5, 5)

heatmap!(ax, centers_x, centers_y, data)

scatter!(ax, [(x, y) for x in centers_x for y in centers_y], color=:white, strokecolor=:black, strokewidth=1)
f
4ce014b

Если добавить еще один элемент к x и y, теперь они будут задавать края прямоугольных ячеек. Вот регулярная сетка:

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

edges_x = 1:6
edges_y = 7:12
data = reshape(1:25, 5, 5)

heatmap!(ax, edges_x, edges_y, data)

scatter!(ax, [(x, y) for x in edges_x for y in edges_y], color=:white, strokecolor=:black, strokewidth=1)
f
46da8e8

Можно проделать то же самое с нерегулярной сеткой:

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

borders_x = [1, 2, 4, 7, 11, 16]
borders_y = [6, 7, 9, 12, 16, 21]
data = reshape(1:25, 5, 5)

heatmap!(ax, borders_x, borders_y, data)
scatter!(ax, [(x, y) for x in borders_x for y in borders_y], color=:white, strokecolor=:black, strokewidth=1)
f
243eb80

Использование Function вместо Matrix

Если в качестве аргумента values используется Function в форме (i, j) -> v, вычисление выполняется по сетке, охватываемой x и y.

using CairoMakie
function mandelbrot(x, y)
    z = c = x + y*im
    for i in 1:30.0; abs(z) > 2 && return i; z = z^2 + c; end; 0
end

heatmap(-2:0.001:1, -1.1:0.001:1.1, mandelbrot,
    colormap = Reverse(:deep))
952ba6f

Три вектора

Повторяющиеся сочетания x и y запрещены, но допускается отсутствие значений.

using CairoMakie
xs = [1, 2, 3, 1, 2, 3, 1, 2, 3]
ys = [1, 1, 1, 2, 2, 2, 3, 3, 3]
zs = [1, 2, 3, 4, 5, 6, 7, 8, NaN]

heatmap(xs, ys, zs)
18af5df

Панель цветов для одной тепловой карты

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

using CairoMakie
xs = range(0, 2π, length=100)
ys = range(0, 2π, length=100)
zs = [sin(x*y) for x in xs, y in ys]

fig, ax, hm = heatmap(xs, ys, zs)
Colorbar(fig[:, end+1], hm)

fig
c3bc5ce

Панель цветов для нескольких тепловых карт

Когда на одном рисунке присутствует несколько тепловых карт, может быть полезно, чтобы все они были представлены одной панелью цветов. Затем важно синхронизировать масштабы и цветовые карты для тепловых карт и панели цветов. Для этого нужно явным образом задать диапазон цветов, чтобы он не зависел от данных, отображаемых на данной тепловой карте.

Поскольку тепловые карты в приведенном ниже примере имеют одинаковые диапазон цветов и цветовую карту, любой из этих компонентов можно передать в Colorbar, чтобы панель цветов получила те же атрибуты. Кроме того, атрибуты панели цветов можно задать явным образом.

using CairoMakie
xs = range(0, 2π, length=100)
ys = range(0, 2π, length=100)
zs1 = [sin(x*y) for x in xs, y in ys]
zs2 = [2sin(x*y) for x in xs, y in ys]

joint_limits = (-2, 2)  # здесь для простоты мы выбираем ограничения вручную, а не вычисляем их

fig, ax1, hm1 = heatmap(xs, ys, zs1,  colorrange = joint_limits)
ax2, hm2 = heatmap(fig[1, end+1], xs, ys, zs2, colorrange = joint_limits)

Colorbar(fig[:, end+1], hm1)                     # Эти три
Colorbar(fig[:, end+1], hm2)                     # панели цветов
Colorbar(fig[:, end+1], colorrange = joint_limits)  # эквивалентны

fig
f9a8622

Использование пользовательской цветовой шкалы

С помощью типа ReversibleScale можно определить пользовательскую (цветовую) шкалу. Если преобразование достаточно простое (log, sqrt, …​), автоматически выводится обратное преобразование.

using CairoMakie
x = 10.0.^(1:0.1:4)
y = 1.0:0.1:5.0
z = broadcast((x, y) -> x - 10, x, y')

scale = ReversibleScale(x -> asinh(x / 2) / log(10), x -> 2sinh(log(10) * x))
fig, ax, hm = heatmap(x, y, z; colorscale = scale, axis = (; xscale = scale))
Colorbar(fig[1, 2], hm)

fig
e03adc0

Построение крупных тепловых карт

Имеющиеся данные можно заключить в Makie.Resampler, чтобы автоматически повторно выполнять выборки крупных тепловых карт только для области просмотра. При увеличении масштаба повторно выбранная версия будет обновляться для отображения с максимальной точностью. Обновления блокируются при нажатии любой кнопки мыши или клавиатуры, чтобы не перегружать, например WGLMakie, обновлениями данных. Это хорошо работает с Axis(figure; zoombutton=Keyboard.left_control). Это поведение можно отключить с помощью

Resampler(data; update_while_button_pressed=true).

Пример:

using Downloads, FileIO, GLMakie
# изображение 30000×22943
path = Downloads.download("https://upload.wikimedia.org/wikipedia/commons/7/7e/In_the_Conservatory.jpg")
img = rotr90(load(path))
f, ax, pl = heatmap(Resampler(img); axis=(; aspect=DataAspect()), figure=(;size=size(img)./20))
hidedecorations!(ax)
f

Для повышения качества при сниженной частоте выборки рекомендуется использовать Makie.Pyramid (может быть перенесен в другой пакет), который создает простую гауссову пирамиду для эффективной выборки со сниженной частотой и без артефактов:

pyramid = Makie.Pyramid(img)
fsize = (size(img) ./ 30) .* (1, 2)
fig, ax, pl = heatmap(Resampler(pyramid);
    axis=(; aspect=DataAspect(), title="Pyramid"), figure=(; size=fsize))
hidedecorations!(ax)
ax, pl = heatmap(fig[2, 1], Resampler(img1);
    axis=(; aspect=DataAspect(), title="No Pyramid"))
hidedecorations!(ax)
save("heatmap-pyramid.png", fig)
heatmap pyramid

В Resampler допускается любой другой тип массива, и он также может реализовывать свою собственную стратегию интерполяции путем перегрузки:

function (array::ArrayType)(xrange::LinRange, yrange::LinRange)
    ...
end

Атрибуты

alpha

Значение по умолчанию: 1.0

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

clip_planes

Значение по умолчанию: automatic

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

colormap

Значение по умолчанию: @inherit colormap :viridis

Устанавливает цветовую схему, которая выбирается для числовых значений. colors. 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. This only applies to GLMakie and WGLMakie and can be used to adjust render order (like a tunable overdraw).

fxaa

Значение по умолчанию: true

Регулирует, будет ли график отображаться с использованием fxaa (сглаживание, только GLMakie).

highclip

Значение по умолчанию: automatic

Цвет для любого значения, превышающего указанный цветовой диапазон.

inspectable

Значение по умолчанию: @inherit inspectable

Определяет, должен ли этот график отображаться в DataInspector. Значение по умолчанию зависит от темы родительской сцены.

inspector_clear

Значение по умолчанию: automatic

Sets a callback function (inspector, plot) -> ... для очистки пользовательских индикаторов в DataInspector.

inspector_hover

Значение по умолчанию: automatic

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

inspector_label

Значение по умолчанию: automatic

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

interpolate

Значение по умолчанию: false

Устанавливает, следует ли интерполировать цвета

lowclip

Значение по умолчанию: automatic

Цвет для любого значения ниже цветового диапазона.

model

Значение по умолчанию: automatic

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

nan_color

Значение по умолчанию: :transparent

Цвет для значений NaN.

overdraw

Значение по умолчанию: false

Определяет, будет ли график отображаться поверх других графиков. Это, в частности, означает игнорирование проверок глубины в бэкендах GL

space

Значение по умолчанию: :data

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

ssao

Значение по умолчанию: false

Определяет, будет ли график отображаться с помощью ssao (screen space ambient occlusion). Обратите внимание, что это имеет смысл только для 3D-графиков и применимо только к fxaa = true.

transformation

Значение по умолчанию: :automatic

Документация недоступна.

transparency

Значение по умолчанию: false

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

visible

Значение по умолчанию: true

Определяет, будет ли отображаться график или нет.