Как работает 2D гистограмма в Matplotlib (hist2D)? - PullRequest
0 голосов
/ 20 февраля 2019

В документации по функции hist2d :

plt.hist2d(x,y , weights=weight)

x и y и веса являются массивными, с формой (n,).

Согласнодокументация, один из выходных данных:

ч: 2D массив

Двумерная гистограмма образцов x и y.Значения в x гистограммированы вдоль первого измерения, а значения в y гистограммированы вдоль второго измерения.

Как создается этот двумерный массив?представьте себе

x = np.arange(1,10)
y = np.arange(1,10)
weights = x * y

Как из них создается 2D-массив?

Я перефразирую вопрос, заданный здесь ранее (это не мое).

1 Ответ

0 голосов
/ 20 февраля 2019

2D гистограмма работает так же, как 1D гистограмма.Вы определяете некоторые ячейки, выясняете, в какой ячейке находится каждая из ваших точек данных, а затем подсчитываете количество точек в каждой ячейке.Если гистограмма взвешена, сложите веса вместо простого подсчета числа.

В качестве примера возьмите

x = [1.6, 2.3, 2.7]
y = [0.7, 1.8, 1.3]

, и мы хотим поместить их в ячейки с ребрами

bins = [0,1,2,3] 

Кроме того, у вас могут быть такие веса, как

weights = [0.6, 1, 2]

. Для визуализации ситуации:

sc = plt.scatter(x,y,c=weights, vmin=0)
plt.colorbar(sc)

plt.xticks(bins)
plt.yticks(bins)
plt.grid()
plt.show()

enter image description here

Теперь мы можем гистограммой невооруженным глазом:

В корзине x = 1..2, y = 0..1 у вас есть одно очко.Эта точка имеет вес 0.6, поэтому значение для этой корзины будет 0.6.
В корзине x = 2..3, y = 1..2 у вас есть две точки,Они имеют вес 1 и 2.Следовательно, значение для этой корзины - 1+2=3.

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

[[ 0.0, 0.6, 0.0 ]
 [ 0.0, 0.0, 3.0 ]
 [ 0.0, 0.0, 0.0 ]]

, и это действительно то, что мы получаем, когда numpy позволяет гистограмме.

values, _, _ = np.histogram2d(x,y, bins=bins, weights=weights)
print(values.T)

Обратите внимание на .T транспонирование, хотя;это то, что предложение «Значения в х гистограммированы вдоль первого измерения, а значения в у гистограммированы вдоль второго измерения».хочет вам сказать.

plt.hist2d - это обертка для numpy.histogram2d, которая затем построит этот массив как изображение

h,_, _, image = plt.hist2d(x,y,bins=bins, weights=weights)
plt.colorbar(image)
plt.show()

enter image description here

, где значения кодируются цветом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...