我正在使用pyplot从python中的数千个点制作散点图。我的问题是他们倾向于集中在一个地方,而且它只是一大堆积分。
是否有某种功能可以使pyplot绘图点达到某个临界密度,然后使其成为等高线图?
我的问题类似于this one,其中示例图具有轮廓线,其中颜色代表绘制点的密度。
由于
答案 0 :(得分:7)
首先,您需要对数据进行密度估算。根据您选择的方法,可以获得varying result。
假设你想做高斯密度估计,基于scipy.stats.gaussian_kde
的例子,你可以得到密度高度:
def density_estimation(m1, m2):
X, Y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([X.ravel(), Y.ravel()])
values = np.vstack([m1, m2])
kernel = stats.gaussian_kde(values)
Z = np.reshape(kernel(positions).T, X.shape)
return X, Y, Z
然后,您可以使用contour
和
X, Y, Z = density_estimation(m1, m2)
fig, ax = plt.subplots()
# Show density
ax.imshow(np.rot90(Z), cmap=plt.cm.gist_earth_r,
extent=[xmin, xmax, ymin, ymax])
# Add contour lines
plt.contour(X, Y, Z)
ax.plot(m1, m2, 'k.', markersize=2)
ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])
plt.show()
作为替代方案,您可以根据其密度更改标记颜色,如here所示。