Возвратите частоту в ячейке 2D гистограммы в Юлии - PullRequest
1 голос
/ 11 октября 2019

Предположим, у меня есть несколько точек 2D-данных, и используя пакет Plots в Julia, можно легко построить 2D-гистограмму. Моя задача состоит в том, чтобы определить функцию, которая сопоставляет точку данных с частотой точек данных бункера, которому принадлежит эта точка. Есть ли функции, которые хорошо подходят для этой задачи?

Например, как на следующей 2D гистограмме: hist

И я хотел бы определить функциютак, что когда я введу произвольные точки данных, которые находятся в области этой гистограммы, функция выведет частоту соответствующего бина. На изображении выше, когда я ввожу (0.1, 0.1), функция должна вывести, скажем, 375 (я предполагаю, что самая яркая сетка представляет частоту 375). Есть ли в Юлии какие-либо удобные функции для выполнения вышеупомянутой задачи?

Редактировать:

using Plots
gr()
histogram2d(randn(10000), randn(10000), nbins=20)

Гистограмма создается из 10000 точек 2D данных, сгенерированных из стандартного нормального распределения. Есть ли в Юлии какая-либо функция для ввода 2D-точки и вывода частоты ячейки, которой принадлежит точка? Можно написать один сам, создавая массивы и ячейки и подсчитывая количество элементов в ячейке введенной точки данных, но это будет утомительным способом.

1 Ответ

0 голосов
/ 11 октября 2019

Я не уверен на 100%, делает ли это то, что делает StatsPlots, но одним из подходов может быть использование гистограммы StatsBase, которая работает для N измерений:

using StatsBase, StatsPlots, Distributions

# Example data 
data = (randn(10_000), randn(10_000))

# Plot StatsPlots 2D histogram
histogram2d(data)

# Fit a histogram with StatsBase
h = fit(Histogram, data)
x = searchsortedfirst(h.edges[1], 0.1)  # returns 10
y = searchsortedfirst(h.edges[2], 0.1)  # returns 11
h.weights[x, y] # returns 243

# Or as a function
function get_freq(h, xval, yval)
    x = searchsortedfirst(h.edges[1], xval)
    y = searchsortedfirst(h.edges[2], yval)
    h.weights[x, y]
end

get_freq(h, 1.4, 0.6) # returns 32
...