2012-06-06 72 views
2

我正在嘗試生成具有兩個不同的y軸和顏色條的散點圖。在matplotlib中繪製多個y軸和colorbar

這裏是所使用的僞代碼:

#!/usr/bin/python 

import matplotlib.pyplot as plt 
from matplotlib import cm 

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
plt.scatter(xgrid, 
     ygrid, 
     c=be,     # set colorbar to blaze efficiency 
     cmap=cm.hot, 
     vmin=0.0, 
     vmax=1.0) 

cbar = plt.colorbar() 
cbar.set_label('Blaze Efficiency') 

ax2 = ax1.twinx() 
ax2.set_ylabel('Wavelength') 

plt.show() 

而且它會產生這樣的情節: plot http://i48.tinypic.com/2zix7x1.png

我的問題是,你如何使用不同規模的「波長」軸,另外,如何將顏色條更向右移動,使其不在波長方向?

回答

5

@ OZ123對不起,我花了這麼長時間迴應。 Matplotlib具有可擴展的可定製性,有時甚至會讓您對實際做的事感到困惑。感謝您創建單獨的軸的幫助。

不過,我不認爲我需要那麼多的控制,我結束了只是用PAD關鍵字參數在

fig.colorbar() 

,這提供了我所需要的。

僞代碼就變成這樣:

#!/usr/bin/python 

import matplotlib.pyplot as plt 
from matplotlib import cm 

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
mappable = ax1.scatter(xgrid, 
         ygrid, 
         c=be,     # set colorbar to blaze efficiency 
         cmap=cm.hot, 
         vmin=0.0, 
         vmax=1.0) 

cbar = fig.colorbar(mappable, pad=0.15) 
cbar.set_label('Blaze Efficiency') 

ax2 = ax1.twinx() 
ax2.set_ylabel('Wavelength') 

plt.show() 

這裏是展示它看起來像現在:enter image description here

2

plt.colorbar()適用於非常簡單的情況,例如,沒有真正考慮過有2個Y軸的情節。 對於彩條位置和屬性的精細控制,您幾乎總是應該使用指定要在哪根軸上繪製顏色條的顏色條。

# on the figure total in precent l b  w , height 
cbaxes = fig.add_axes([0.1, 0.1, 0.8, 0.05]) # setup colorbar axes. 
# put the colorbar on new axes 
cbar = fig.colorbar(mapable,cax=cbaxes,orientation='horizontal') 

注意,彩條將下列關鍵字:

關鍵字參數:

CAX 無|軸對象,其中彩條將繪製到ax 無|父軸對象從一個新的 彩條軸,其空間將被盜取

你也可以在這裏看到我的關於figure colorbar on separate axes更加延長的答案。