numpy.histogram2d
- numpy.histogram2d(x, y, bins=10, range=None, density=None, weights=None)[source]
-
Вычислить двумерную гистограмму двух наборов данных.
- Параметры:
-
- xarray_like, форма (N,)
-
Массив, содержащий координаты x точек, для которых будет вычислена гистограмма.
- yarray_like, форма (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]]. Все значения вне этого диапазона будут считаться выбросами и не будут учтены в гистограмме. - densitybool, необязательно
-
Если False, по умолчанию, возвращает число выборок в каждом разбиении. Если True, возвращает плотность вероятности в разбиении,
bin_count / sample_count / bin_area. - weightsarray_like, форма (N,), необязательно
-
Массив значений
w_iвзвешивающий каждую выборку(x_i, y_i). Веса нормализуются до 1, еслиdensityравно True. Еслиdensityравно False, значения возвращаемой гистограммы равны сумме весов, принадлежащих выборкам, попадающим в каждое разбиение.
- Возвращает:
-
- Hndarray, форма(nx, ny)
-
Двумерная гистограмма выборок
xиy. Значения вxгистограммируются вдоль первого измерения, а значения вyгистограммируются вдоль второго измерения. - xedgesndarray, форма(nx+1,)
-
Границы разбиений вдоль первого измерения.
- yedgesndarray, форма(ny+1,)
-
Границы разбиений вдоль второго измерения.
См. также
histogram-
1D гистограмма
histogramdd-
Многомерная гистограмма
Примечания
Когда
densityравно True, возвращаемая гистограмма — плотность выборок, определенная так, что сумма по разбиениям произведенияbin_value * bin_areaравна 1.Обратите внимание, что гистограмма не следует картезианской конвенции, где значения
xнаходятся на оси абсцисс, а значенияyна оси ординат. Скорее, значенияxгистограммируются вдоль первого измерения массива (вертикально), а значенияyвдоль второго измерения массива (горизонтально). Это обеспечивает совместимость сhistogramdd.Примеры
>>> from matplotlib.image import NonUniformImage >>> import matplotlib.pyplot as plt
Построить 2-мерную гистограмму с переменной шириной разбиений. Сначала определите границы разбиений:
>>> 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]]) <matplotlib.image.AxesImage object at 0x...>
pcolormeshможет отображать фактические границы:>>> ax = fig.add_subplot(132, title='pcolormesh: actual edges', ... aspect='equal') >>> X, Y = np.meshgrid(xedges, yedges) >>> ax.pcolormesh(X, Y, H) <matplotlib.collections.QuadMesh object at 0x...>
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-мерную гистограмму без указания границ разбиений:
>>> # 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()
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.histogram2d.html