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

hexbin

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

hexbin(xs, ys; kwargs...)

Строит тепловую карту с шестиугольными ячейками для наблюдений xs и ys.

Тип графика

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

Примеры

Задание количества столбцов

Целое число, заданное в качестве значения bins, будет соответствовать количеству столбцов для x и y. Максимальное количество столбцов в одном измерении — 2.

using CairoMakie
using Random
Random.seed!(1234)

f = Figure(size = (800, 800))

x = rand(300)
y = rand(300)

for i in 2:5
    ax = Axis(f[fldmod1(i-1, 2)...], title = "bins = $i", aspect = DataAspect())
    hexbin!(ax, x, y, bins = i)
    wireframe!(ax, Rect2f(Point2f.(x, y)), color = :red)
    scatter!(ax, x, y, color = :red, markersize = 5)
end

f
cb984ea

Можно также передать кортеж целых чисел, чтобы управлять x и y по отдельности.

using CairoMakie
using Random
Random.seed!(1234)

f = Figure(size = (800, 800))

x = rand(300)
y = rand(300)

for i in 2:5
    ax = Axis(f[fldmod1(i-1, 2)...], title = "bins = (3, $i)", aspect = DataAspect())
    hexbin!(ax, x, y, bins = (3, i))
    wireframe!(ax, Rect2f(Point2f.(x, y)), color = :red)
    scatter!(ax, x, y, color = :red, markersize = 5)
end

f
1b47f47

Задание размера ячеек

Для управления размером столбца напрямую задайте ключевое слово cellsize. В этом случае параметр bins игнорируется.

Высота шестиугольника больше его ширины. Вот почему при задании одинакового размера для x и y получаются неравные шестиугольники.

using CairoMakie
using Random
Random.seed!(1234)

f = Figure(size = (800, 800))

x = rand(300)
y = rand(300)

for (i, cellsize) in enumerate([0.1, 0.15, 0.2, 0.25])
    ax = Axis(f[fldmod1(i, 2)...], title = "cellsize = ($cellsize, $cellsize)", aspect = DataAspect())
    hexbin!(ax, x, y, cellsize = (cellsize, cellsize))
    wireframe!(ax, Rect2f(Point2f.(x, y)), color = :red)
    scatter!(ax, x, y, color = :red, markersize = 5)
end

f
79dafaf

Чтобы получить шестиугольники одинакового размера, задайте в качестве размера столбца одно и то же число. Это число определяет ширину столбца, и высота будет вычисляться как 2 * step_x / sqrt(3). Обратите внимание, что внешний вид шестиугольников будет одинаковым только в том случае, если оси x и y имеют равный масштаб, поэтому в этих примерах мы используем aspect = DataAspect().

using CairoMakie
using Random
Random.seed!(1234)

f = Figure(size = (800, 800))

x = rand(300)
y = rand(300)

for (i, cellsize) in enumerate([0.1, 0.15, 0.2, 0.25])
    ax = Axis(f[fldmod1(i, 2)...], title = "cellsize = $cellsize", aspect = DataAspect())
    hexbin!(ax, x, y, cellsize = cellsize)
    wireframe!(ax, Rect2f(Point2f.(x, y)), color = :red)
    scatter!(ax, x, y, color = :red, markersize = 5)
end

f
89c6797

Скрытие шестиугольников с низким значением количества

Все шестиугольники со значением количества меньше threshold будут удалены:

using CairoMakie
using Random
Random.seed!(1234)

f = Figure(size = (800, 800))

x = randn(100000)
y = randn(100000)

for (i, threshold) in enumerate([1, 10, 100, 500])
    ax = Axis(f[fldmod1(i, 2)...], title = "threshold = $threshold", aspect = DataAspect())
    hexbin!(ax, x, y, cellsize = 0.4, threshold = threshold)
end
f
7f8380e

Изменение масштаба количества наблюдений в столбце

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

using CairoMakie
using Random
Random.seed!(1234)

x = randn(100000)
y = randn(100000)

f = Figure()
hexbin(f[1, 1], x, y, bins = 40,
    axis = (aspect = DataAspect(), title = "colorscale = identity"))
hexbin(f[1, 2], x, y, bins = 40, colorscale=log10,
    axis = (aspect = DataAspect(), title = "colorscale = log10"))
f
bec0056

Отображение шестиугольников с нулевым значением количества

При установке threshold = 0 будут показаны все шестиугольники, которые входят в рамки ограничений для входных данных. В этом примере мы добавляем прозрачный цвет в начало цветовой карты и обводим каждый шестиугольник, чтобы пустые шестиугольники были видны, но не слишком отвлекали внимание.

using CairoMakie
using DelimitedFiles


a = map(Point2f, eachrow(readdlm(assetpath("airportlocations.csv"))))

f, ax, hb = hexbin(a,
    cellsize = 6,
    axis = (; aspect = DataAspect()),
    threshold = 0,
    colormap = [Makie.to_color(:transparent); Makie.to_colormap(:viridis)],
    strokewidth = 0.5,
    strokecolor = :gray50,
    colorscale = Makie.pseudolog10)

tightlimits!(ax)

Colorbar(f[1, 2], hb,
    label = "Number of airports",
    height = Relative(0.5)
)
f
bd193de

Применение весов к наблюдениям

using CairoMakie

using Random
Random.seed!(1234)

f = Figure(size = (800, 800))

x = 1:100
y = 1:100
points = vec(Point2f.(x, y'))

weights = [nothing, rand(length(points)), Makie.StatsBase.eweights(length(points), 0.005), Makie.StatsBase.weights(randn(length(points)))]
weight_labels = ["No weights", "Vector{<: Real}", "Exponential weights (StatsBase.eweights)", "StatesBase.weights(randn(...))"]

for (i, (weight, title)) in enumerate(zip(weights, weight_labels))
    ax = Axis(f[fldmod1(i, 2)...], title = title, aspect = DataAspect())
    hexbin!(ax, points; weights = weight)
    autolimits!(ax)
end

f
5e9e2dd

Атрибуты

alpha

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

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

bins

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

Если бы Int, задает количество ячеек в направлении x и y. Если a NTuple{2, Int}, задает количество ячеек для x и y отдельно.

cellsize

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

Если a Real, образует шестиугольники с одинаковыми сторонами шириной cellsize. Если a Tuple{Real, Real} ширина и высота шестиугольника задаются отдельно.

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.

highclip

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

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

lowclip

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

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

nan_color

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

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

strokecolor

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

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

strokewidth

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

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

threshold

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

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

weights

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

Веса для каждого наблюдения. Может быть nothing (каждое наблюдение имеет вес 1) или любое другое AbstractVector{<: Real} или StatsBase.AbstractWeights.