numpy.histogram2d#
- numpy.histogram2d(x, y, bins=10, range=None, плотность=None, веса=None)[источник]#
Вычисление двумерной гистограммы двух выборок данных.
- Параметры:
- xarray_like, shape (N,)
Массив, содержащий x-координаты точек для построения гистограммы.
- yarray_like, shape (N,)
Массив, содержащий y-координаты точек для построения гистограммы.
- binsint или array_like или [int, int] или [array, array], необязательный
Спецификация бина:
Если int, количество бинов для двух измерений (nx=ny=bins).
Если array_like, границы бинов для двух измерений (x_edges=y_edges=bins).
Если [int, int], количество бинов в каждом измерении (nx, ny = bins).
Если [array, array], границы бинов в каждом измерении (x_edges, y_edges = bins).
Комбинация [int, array] или [array, int], где int - количество бинов, а array - границы бинов.
- rangearray_like, форма(2,2), опционально
Левый и правый края бинов по каждому измерению (если не указаны явно в bins параметры):
[[xmin, xmax], [ymin, ymax]]. Все значения за пределами этого диапазона будут считаться выбросами и не учитываться в гистограмме.- плотностьbool, необязательно
Если False (по умолчанию), возвращает количество выборок в каждом бине. Если True, возвращает вероятность плотность функции в бине,
bin_count / sample_count / bin_area.- весаarray_like, shape(N,), optional
Массив значений
w_iвзвешивая каждую выборку(x_i, y_i). Веса нормализуются до 1, если плотность равно True. Если плотность если False, значения возвращаемой гистограммы равны сумме весов, принадлежащих выборкам, попадающим в каждый бин.
- Возвращает:
- Hndarray, форма(nx, ny)
Двумерная гистограмма выборок x и y. Значения в x гистограммируются по первому измерению, а значения в y гистограммируются по второму измерению.
- xedgesndarray, форма(nx+1,)
Границы бинов по первому измерению.
- yedgesndarray, shape(ny+1,)
Границы бинов по второму измерению.
Смотрите также
histogram1D гистограмма
histogramddМногомерная гистограмма
Примечания
Когда плотность равно True, то возвращаемая гистограмма представляет собой плотность выборки, определённую так, что сумма по бинам произведения
bin_value * bin_areaравен 1.Обратите внимание, что гистограмма не следует декартовой системе координат, где x значения находятся на оси абсцисс и y значения на оси ординат. Скорее, x гистограмма строится по первому измерению массива (вертикально), и y вдоль второго измерения массива (горизонтально). Это обеспечивает совместимость с
histogramdd.Примеры
>>> import numpy as np >>> from matplotlib.image import NonUniformImage >>> import matplotlib.pyplot as plt
Построить 2-D гистограмму с переменной шириной бина. Сначала определите края бинов:
>>> xedges = [0, 1, 3, 5] >>> yedges = [0, 2, 3, 4, 6]
Далее мы создаем гистограмму H со случайным содержимым бинов:
>>> x = np.random.normal(2, 1, 100) >>> y = np.random.normal(1, 1, 100) >>> H, xedges, yedges = np.histogram2d(x, y, bins=(xedges, yedges)) >>> # Histogram does not follow Cartesian convention (see Notes), >>> # therefore transpose H for visualization purposes. >>> H = H.T
imshowможет отображать только квадратные бины:>>> fig = plt.figure(figsize=(7, 3)) >>> ax = fig.add_subplot(131, title='imshow: square bins') >>> plt.imshow(H, interpolation='nearest', origin='lower', ... extent=[xedges[0], xedges[-1], yedges[0], yedges[-1]])
pcolormeshможет отображать фактические границы:>>> ax = fig.add_subplot(132, title='pcolormesh: actual edges', ... aspect='equal') >>> X, Y = np.meshgrid(xedges, yedges) >>> ax.pcolormesh(X, Y, H)
NonUniformImageможет использоваться для отображения фактических границ бинов с интерполяцией:>>> ax = fig.add_subplot(133, title='NonUniformImage: interpolated', ... aspect='equal', xlim=xedges[[0, -1]], ylim=yedges[[0, -1]]) >>> im = NonUniformImage(ax, interpolation='bilinear') >>> xcenters = (xedges[:-1] + xedges[1:]) / 2 >>> ycenters = (yedges[:-1] + yedges[1:]) / 2 >>> im.set_data(xcenters, ycenters, H) >>> ax.add_image(im) >>> plt.show()
Также возможно построить 2-D гистограмму без указания границ бинов:
>>> # Generate non-symmetric test data >>> n = 10000 >>> x = np.linspace(1, 100, n) >>> y = 2*np.log(x) + np.random.rand(n) - 0.5 >>> # Compute 2d histogram. Note the order of x/y and xedges/yedges >>> H, yedges, xedges = np.histogram2d(y, x, bins=20)
Теперь мы можем построить гистограмму с помощью
pcolormesh, иhexbinдля сравнения.>>> # Plot histogram using pcolormesh >>> fig, (ax1, ax2) = plt.subplots(ncols=2, sharey=True) >>> ax1.pcolormesh(xedges, yedges, H, cmap='rainbow') >>> ax1.plot(x, 2*np.log(x), 'k-') >>> ax1.set_xlim(x.min(), x.max()) >>> ax1.set_ylim(y.min(), y.max()) >>> ax1.set_xlabel('x') >>> ax1.set_ylabel('y') >>> ax1.set_title('histogram2d') >>> ax1.grid()
>>> # Create hexbin plot for comparison >>> ax2.hexbin(x, y, gridsize=20, cmap='rainbow') >>> ax2.plot(x, 2*np.log(x), 'k-') >>> ax2.set_title('hexbin') >>> ax2.set_xlim(x.min(), x.max()) >>> ax2.set_xlabel('x') >>> ax2.grid()
>>> plt.show()