如何制作matplotlib密度图

时间:2014-01-30 23:36:22

标签: matplotlib

假设我有两个相同长度的xy列表。此长度不固定,但始终为非零。它们是非负点的x和y值。

我想创建一个与http://www.mathworks.com/matlabcentral/fx_files/31726/1/datadensitymap.jpg非常相似的颜色密度图。

这是我从互联网上找到的几个地方借来的尝试:

density = stats.gaussian_kde([x,y])
color = density([x,y])
x1 = np.array(x)
y1 = np.array(y)
xmin = x1.min()
xmax = x1.max()
ymin = y1.min()
ymax = y1.max()
xscale = (xmax-xmin)/100
yscale = (ymax-ymin)/100
X, Y = np.mgrid[xmin:xmax:xscale, ymin:ymax:yscale]
positions = np.vstack([X.ravel(), Y.ravel()])
Z = np.reshape(density(positions).T, X.shape)
cmap = plt.get_cmap("hot")
plt.imshow(np.rot90(Z), cmap=cmap, extent=[xmin, xmax, ymin, ymax])
plt.scatter(x, y, c=color, cmap=cmap)

当我运行此代码时,绘图不会呈现;标题和标签混在一起。

当我取消对imshow的调用时,散点图完全显示正确显示的点上的密度颜色。

1 个答案:

答案 0 :(得分:1)

事实证明,情节是渲染,但由于x的值远大于y,渲染的图形没有高度。设置aspect="auto"修复它:

plt.imshow(np.rot90(Z), cmap=cmap, extent=[xmin, xmax, ymin, ymax], aspect="auto")