numpy.histogram2d
numpy.histogram2d(x, y, bins=10, range=None, normed=None, weights=None, density=None) [source]
计算两个数据样本的二维直方图。
参数 : | x :array_like, shape (N,) 包含要直方图的点的x坐标的数组。 y :array_like, shape (N,) 包含要直方图的点的y坐标的数组。 bins :int 或 array_like 或 [int, int] 或 [array, array], 可选 bin规格: 1) 如果为int,则为两个维度的bins数(nx = ny = bins)。 2) 如果为array_like, 则两个维度的bin边缘(x_edges = y_edges = bins)。 3) 如果为[int,int], 则为每个维度中的箱数(nx,ny =bins)。 4) 如果为[array,array], 则每个维度的bin边缘(x_edges,y_edges = bins)。 5) [int,array]或[array,int]的组合, 其中int是容器的数量,而array是容器的边缘。 range :array_like, shape(2,2), 可选 bins沿每个维度的最左边缘和最右边缘 (如果未在bins参数中明确指定):
所有超出此范围的值都将被视为离群值,并且不会在直方图中列出。 density :bool, 可选 如果默认值为False,则返回每个bin中的样本数。如果为True, 则在bin处返回概率密度函数 normed :bool, 可选 密度参数的别名,其行为相同。 为了避免与 weights :array_like, shape(N,), 可选 一组值 如果标准为True,则将权重标准化为1。 如果normed为False, 则返回的直方图的值等于属于每个bin的样本的权重之和。 |
返回值 : | H :ndarray, shape(nx, ny) 样本x和y的二维直方图。 x中的值沿第一维直方图,y中的值沿第二维直方图。 xedges :ndarray, shape(nx+1,) 垃圾箱沿第一维边缘。 yedges :ndarray, shape(ny+1,) 垃圾箱沿第二维边缘。 |
Notes
当normed为True时,返回的直方图就是样本密度,定义为使得产品bin_value * bin_area
的bin上的总和为1。
请注意,直方图不遵循笛卡尔约定,其中x值在横坐标上,y值在纵坐标上。相反,x沿数组的第一维(垂直)直方图,y沿数组的第二维(水平)直方图。这样可以确保与histogramdd兼容。
例子
>>> from matplotlib.image import NonUniformImage
>>> import matplotlib.pyplot as plt
构造具有可变bin宽的二维直方图。首先定义bin边缘:
>>> xedges = [0, 1, 3, 5]
>>> yedges = [0, 2, 3, 4, 6]
接下来,我们创建具有随机bin内容的直方图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))
>>> H = H.T # Let each row list bins with common y range.
imshow只能显示方形bins:
>>> fig = plt.figure(figsize=(7, 3))
>>> ax = fig.add_subplot(131, title='imshow: square bins')
>>> plt.imshow(H, interpolation='nearest', origin='low',
... 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可用于显示具有插值的实际bin边缘:
>>> 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.images.append(im)
>>> plt.show()