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()

Теперь мы можем гистограммой невооруженным глазом:
В корзине 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()

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