2014-01-30 60 views
1

比方說,我有兩個相同長度的列表,xy。這個長度不是固定的,但總是非零。它們是非負值的x和y值。如何製作matplotlib密度圖

我想創建一個很像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

事實證明,該圖是渲染,但因爲x的值比y大得多,所以渲染的圖沒有高度。設置aspect="auto"固定它:

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