2017-02-22 80 views
0

我想要做的事很簡單:對於使用plt.subplots()創建的圖,我想顯示一個顏色條。顯示matplotlib流圖的子圖colorbar

所以,這是我做的:

def plotVF(self, u, v): 
    m = np.sqrt(np.power(u, 2) + np.power(v, 2)) 

    xrange = np.linspace(0, u.shape[1], u.shape[1]); 
    yrange = np.linspace(0, u.shape[0], u.shape[0]); 

    x, y = np.meshgrid(xrange, yrange) 
    mag = np.hypot(u, v) 
    scale = 1 
    lw = scale * mag/mag.max() 

    f, ax = plt.subplots() 
    h = ax.streamplot(x, y, u, v, color=mag, linewidth=lw, density=3, arrowsize=1, norm=plt.Normalize(0, 70)) 
    ax.set_xlim(0, u.shape[1]) 
    ax.set_ylim(0, u.shape[0]) 
    ax.set_xticks([]) 
    ax.set_yticks([]) 
    cbar = f.colorbar(h, ax=ax) 
    cbar.ax.tick_params(labelsize=5) 

    plt.show() 

因此在docs所示的情況。 不過,我不斷收到:

AttributeError: 'StreamplotSet' object has no attribute 'autoscale_None' 

這個例子只有一個情節,但我有一個以上的,這就是爲什麼我不直接使用plt.colorbar().

+0

[如何將顏色條添加到matplotlib中的圖形]可能的重複(http://stackoverflow.com/questions/42387471/how-to-add-a-colorbar-to-a-figure-in-matplotlib ) – languitar

回答

0

ax.streamplot返回StreamplotSet對象。這不是一個可用於製作colorbar的mappabple實例。但是,根據docs for streamplot,它包含LineCollectionFancyArrowPatch對象的集合。我們可以使用LineCollection來製作彩條。

它可以從您訪問h,使用h.lines。因此,爲了讓您的彩條,你需要:

cbar = f.colorbar(h.lines, ax=ax) 

你可以看到這樣的例子在matplotlib畫廊,here