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

Гистограммы

Доступ к одномерным гистограммам осуществляется с помощью функции histogram и ее изменяемого варианта histogram!. На этой странице мы будем использовать бэкенд GR по умолчанию.

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

using Plots

x = randn(10^3)
histogram(x)

Количество столбцов по умолчанию определяется правилом Фридмана-Диакониса. Выбрать другие алгоритмы столбцов можно с помощью атрибута bins, который может принимать значения типа :sqrt или :scott для правила Скотта. В качестве альтернативы можно передать диапазон для более точного управления количеством столбцов, их минимумом и максимумом. Например, чтобы построить 20 столбцов от --5 до +5, введите

range(-5, 5, length=21)

где к длине нужно прибавить 1, так как в длине учитывается количество границ столбцов. Наконец, можно передать и целое число, например bins=15, но это будет лишь приближенное значение, а реальное количество столбцов может отличаться.

Нормализация

Часто желательно каким-либо образом нормализовать гистограмму. Для этого используется атрибут normalize, и мы хотим, чтобы normalize=:pdf (или :true) нормализовал общую площадь столбцов к 1. Поскольку мы сделали выборку из нормализованного распределения, можно построить и его график. Конечно, можно изменить и другие общие атрибуты, такие как название, надписи осей и цвета.

p(x) = 1/sqrt(2pi) * exp(-x^2/2)
b_range = range(-5, 5, length=21)

histogram(x, label="Experimental", bins=b_range, normalize=:pdf, color=:gray)
plot!(p, label="Analytical", lw=3, color=:red)
xlims!(-5, 5)
ylims!(0, 0.4)
title!("Normal distribution, 1000 samples")
xlabel!("x")
ylabel!("P(x)")

normalize может принимать другие значения, в том числе:

  • :probability, которое суммирует все высоты столбцов до 1

  • :density, которое делает площадь каждого столбца равной количеству

Взвешенные гистограммы

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

f_exp(x) = exp(x)/(exp(1)-1)

x = rand(10^4)
w = exp.(x)

histogram(x, label="Experimental", bins=:scott, weights=w, normalize=:pdf, color=:gray)
plot!(f_exp, label="Analytical", lw=3, color=:red)
plot!(legend=:topleft)
xlims!(0, 1.0)
ylims!(0, 1.6)
title!("Uniform distribution, weighted by exp(x)")
xlabel!("x")
ylabel!("P(x)")

Другие разновидности

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

  • С помощью stephist и stephist! можно строить гистограммы рассеяния, где вместо столбцов используются контуры.

p1 = histogram(x, title="Bar")
p2 = scatterhist(x, title="Scatter")
p3 = stephist(x, title="Step")
plot(p1, p2, p3, layout=(1, 3), legend=false)

Обратите внимание, что ось Y гистограммы рассеяния по умолчанию не будет начинаться с 0.

Двухмерные гистограммы

Доступ к двухмерным гистограммам осуществляется с помощью функции histogram2d и ее изменяемого варианта histogram2d!. Для их построения требуются два вектора x и y одинаковой длины.

Гистограмма строится в двух проекциях в виде тепловой карты, а не в виде трехмерных столбцов. По умолчанию используется цветовая карта :inferno, как и для контурных графиков и тепловых карт. По умолчанию столбцы без количества вообще не строятся.

x = randn(10^4)
y = randn(10^4)
histogram2d(x, y)

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

Полное отсутствие построенных столбцов может оказаться визуально непривлекательным, особенно если используется цветовая карта с темными цветами на нижнем конце. Чтобы исправить это, используйте атрибут show_empty_bins=true.

w = exp.(x)
histogram2d(x, y, bins=(40, 20), show_empty_bins=true,
    normalize=:pdf, weights=w, color=:plasma)
title!("Normalized 2D Histogram")
xlabel!("x")
ylabel!("y")