NumPy参考 >例行程序 >Statistics > numpy.histogram2d
numpy.
histogram2d
(x,y,bins = 10,range = None,normed = None,weights = None,density = None )[源代码] ¶计算两个数据样本的二维直方图。
包含要直方图的点的x坐标的数组。
包含要直方图的点的y坐标的数组。
垃圾桶规格:
如果为int,则为两个维度的箱数(nx = ny = bins)。
如果为array_like,则两个维度的bin边缘(x_edges = y_edges = bins)。
如果[int,int],则为每个维度中的箱数(nx,ny =箱数)。
如果为[array,array],则每个维度的bin边缘(x_edges,y_edges = bins)。
[int,array]或[array,int]的组合,其中int是容器的数量,而array是容器的边缘。
沿着每个维度仓的最左和最右边缘(如果不是在明确指定仓参数):
。所有超出此范围的值都将被视为离群值,并且不会在直方图中列出。[[xmin, xmax], [ymin, ymax]]
如果默认值为False,则返回每个bin中的样本数。如果为True,则在bin处返回概率密度函数
。bin_count / sample_count / bin_area
密度参数的别名,其行为相同。为避免与打破规范的混淆histogram
,
应首选密度。
w_i
加权每个样本的值的数组。如果范数为True,则将权重标准化为1 。如果normed为False,则返回的直方图的值等于属于每个bin的样本的权重之和。(x_i, y_i)
样本x和y的二维直方图。x 中的值沿第一维直方图,y中的值沿第二维直方图。
垃圾箱沿第一维边缘。
垃圾箱沿第二维边缘。
也可以看看
histogram
一维直方图
histogramdd
多维直方图
笔记
当normed为True时,则返回的直方图为样本密度,定义为样本积的总和
为1。bin_value * bin_area
请注意,直方图不遵循笛卡尔约定,其中x值在横坐标上,y值在纵坐标上。而是,x沿数组的第一维(垂直)直方图,y沿数组的第二维(水平)直方图。这样可确保与的兼容性histogramdd
。
例子
>>> from matplotlib.image import NonUniformImage
>>> import matplotlib.pyplot as plt
构造具有可变箱宽的二维直方图。首先定义垃圾箱边缘:
>>> 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
只能显示方形垃圾箱:
>>> 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
可用于显示带有插值的实际面元边缘:
>>> 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()