2013-07-02 187 views
14

有誰知道一種將散點圖帶到matplotlib中的前景的方法嗎?我必須在輪廓頂部顯示散點圖,但默認情況下它會繪製在下方...Matplotlib:將散點圖繪製到輪廓圖上的前景

在此先感謝!

+4

檢查出'scatter'方法的['zorder'](http://matplotlib.org/api/artist_api.html#matplotlib.artist.Artist.set_zorder)參數。 matplotlib網站上的[示例用法](http://matplotlib.org/examples/pylab_examples/zorder_demo.html)。 – hooy

+0

這樣做,謝謝! – Mike

回答

23

您可以手動選擇不同圖表以何種順序顯示不同的圖表,例如zorder參數。方法scatter

爲了演示,請參閱下面的代碼,其中左側子圖中的散點圖具有zorder=1,右側子圖中具有zorder=-1。最高的對象zorder放置在頂部。這意味着散點圖將放置在第一個子圖中輪廓的頂部,而放置在第二個子圖的下方。

import numpy as np 
import matplotlib.cm as cm 
import matplotlib.mlab as mlab 
import matplotlib.pyplot as plt 

delta = 0.025 
x = np.arange(-3.0, 3.0, delta) 
y = np.arange(-2.0, 2.0, delta) 
X, Y = np.meshgrid(x, y) 
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) 
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1) 
Z = 10.0 * (Z2 - Z1) 

norm = cm.colors.Normalize(vmax=abs(Z).max(), vmin=-abs(Z).max()) 
cmap = cm.PRGn 

levels = np.arange(-2.0, 1.601, 0.4) 

fig, axes = plt.subplots(1,2, sharey=True) 

for ax, zord in zip(axes, [1, -1]): 
    ax.contourf(X, Y, Z, levels, 
       cmap=cm.get_cmap(cmap, len(levels)-1), 
       norm=norm) 
    ax.autoscale(False) # To avoid that the scatter changes limits 
    ax.scatter(np.random.uniform(-3,3,10), 
       np.random.uniform(-2,2,10), 
       zorder=zord) 
    ax.set_title('Scatter with zorder={0}'.format(zord)) 

enter image description here