Spec-Zone.ru › NumPy 2.0

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()
../../_images/numpy-histogram2d-1_00_00.png

Также можно построить 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()
../../_images/numpy-histogram2d-1_01_00.png

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.histogram2d.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API