numpy.histogram2d¶
-
numpy.
histogram2d
(x, y, bins=10, range=None, normed=False, weights=None)[source]¶ 计算两个数据样本的二维直方图。
参数: x:array_like,shape(N,)
包含要被直方图化的点的x坐标的数组。
y:array_like,shape(N,)
包含要被直方图化的点的y坐标的数组。
bins:int或array_like或[int,int]或[数组,数组],可选
bin规范:
- 如果int,两个维度的仓的数量(nx = ny = bin)。
- 如果array_like,二维的二进制边(x_edges = y_edges = bins)。
- 如果[int,int],每个维度中的块数(nx,ny = bin)。
- 如果[数组,数组],每个维度中的bin边(x_edges,y_edges = bins)。
- 组合[int,数组]或[数组,int],其中int是二进制数的数字,数组是二进制边。
范围:array_like,shape(2,2),可选
沿着每个维度的仓的最左边缘和最右边缘(如果未在bin参数中明确指定):
[[xmin, xmax] / t3> [ymin, ymax]]
。超出此范围的所有值将被视为离群值,而不在直方图中计算。normed:bool,可选
如果为False,则返回每个bin中的样本数。如果为True,则返回bin密度
bin_count / sample_count / bin_area
。权限:array_like,shape(N,),可选
对每个样本
(x_i, y_i)
加权的数组w_i
。如果normed为True,则权重被归一化为1。如果normed为False,则返回的直方图的值等于属于落入每个仓中的样本的权重的和。返回: H:ndarray,shape(nx,ny)
样本的二维直方图x和y。x中的值沿第一个维度进行直方图,y中的值沿第二个维度进行直方图。
xedges:ndarray,shape(nx,)
仓沿第一维的边。
yedges:ndarray,shape(ny)
bin沿着第二维度。
也可以看看
histogram
- 1D直方图
histogramdd
- 多维直方图
笔记
When normed is True, then the returned histogram is the sample density, defined such that the sum over bins of the product
bin_value * bin_area
is 1.请注意,直方图不遵循笛卡尔约定,其中x值在横坐标上,而y值在纵坐标轴上。相反,x沿数组(垂直)的第一维直方图,沿数组(水平)的第二维直方图y。这可确保与
histogramdd
的兼容性。例子
>>> import matplotlib as mpl >>> import matplotlib.pyplot as plt
构造具有可变bin宽度的2D直方图。首先定义bin边缘:
>>> xedges = [0, 1, 1.5, 3, 5] >>> yedges = [0, 2, 3, 4, 6]
接下来我们创建一个带有随机bin内容的直方图H:
>>> x = np.random.normal(3, 1, 100) >>> y = np.random.normal(1, 1, 100) >>> H, xedges, yedges = np.histogram2d(y, x, bins=(xedges, yedges))
或者,我们用确定的bin内容填充直方图H:
>>> H = np.ones((4, 4)).cumsum().reshape(4, 4) >>> print(H[::-1]) # This shows the bin content in the order as plotted [[ 13. 14. 15. 16.] [ 9. 10. 11. 12.] [ 5. 6. 7. 8.] [ 1. 2. 3. 4.]]
Imshow只能做一个等距表示的箱:
>>> fig = plt.figure(figsize=(7, 3)) >>> ax = fig.add_subplot(131) >>> ax.set_title('imshow: equidistant') >>> im = plt.imshow(H, interpolation='nearest', origin='low', extent=[xedges[0], xedges[-1], yedges[0], yedges[-1]])
pcolormesh可以显示确切的边框:
>>> ax = fig.add_subplot(132) >>> ax.set_title('pcolormesh: exact bin edges') >>> X, Y = np.meshgrid(xedges, yedges) >>> ax.pcolormesh(X, Y, H) >>> ax.set_aspect('equal')
NonUniformImage通过插值显示精确边框:
>>> ax = fig.add_subplot(133) >>> ax.set_title('NonUniformImage: interpolated') >>> im = mpl.image.NonUniformImage(ax, interpolation='bilinear') >>> xcenters = xedges[:-1] + 0.5 * (xedges[1:] - xedges[:-1]) >>> ycenters = yedges[:-1] + 0.5 * (yedges[1:] - yedges[:-1]) >>> im.set_data(xcenters, ycenters, H) >>> ax.images.append(im) >>> ax.set_xlim(xedges[0], xedges[-1]) >>> ax.set_ylim(yedges[0], yedges[-1]) >>> ax.set_aspect('equal') >>> plt.show()
(源代码)