2015-02-17 38 views
2

我試圖創建一個圖1行和3列,並與許多事情掙扎。首先,我的子圖會變成非常小的薄片,當我嘗試添加一個顏色條時出現錯誤。我怎樣才能使subplots成爲盒子,並且顏色條顯示在最右側?改變subplot尺寸,並添加直方圖colord2

rmax0,rmax1,和rmax2 0和700之間的所有範圍(大多數是小於200)和0至10

import matplotlib.pyplot as plt 
import numpy as np 

ax1 = plt.subplot(131) 
nice = plt.get_cmap('BuPu') 
bins1 = np.arange(0,700,700/50.0) 
bins2 = np.arange(0,10,10/50.0) 
h,xedges,yedges = np.histogram2d(rmax0,fspd,bins=[bins1,bins2],normed=True) 
X,Y = np.meshgrid(xedges,yedges) 
ax1.pcolormesh(X, Y, h,cmap=nice) 
ax1.set_aspect('equal') 
plt.xlim([0,200]) 
plt.ylim([0,10]) 

ax2 = plt.subplot(132) 
h,xedges,yedges = np.histogram2d(rmax1,fspd,bins=[bins1,bins2],normed=True) 
X,Y = np.meshgrid(xedges,yedges) 
ax2.pcolormesh(X, Y, h,cmap=nice) 
ax2.set_aspect('equal') 
plt.xlim([0,200]) 
plt.ylim([0,10]) 

ax3 = plt.subplot(133) 
h,xedges,yedges = np.histogram2d(rmax2,fspd,bins=[bins1,bins2],normed=True) 
X,Y = np.meshgrid(xedges,yedges) 
ax3.pcolormesh(X, Y, h,cmap=nice) 
ax3.set_aspect('equal') 
plt.xlim([0,200]) 
plt.ylim([0,10]) 
plt.colorbar() 

plt.show() 

fspd範圍當我添加我得到plt.colorbar()行出現以下錯誤: RuntimeError:找不到可映射的顏色條創建。首先定義一個可映射的圖像(帶有imshow)或輪廓集(帶有contourf)。

回答

1

您的情節最終會像細小的條子一樣,因爲你強制縱橫比。嘗試禁用這些行:

ax1.set_aspect('equal') 
ax2.set_aspect('equal') 
ax3.set_aspect('equal') 

,如果你這樣稱呼它的彩條會顯示:

p = ax3.pcolormesh(X, Y, h, cmap=nice) 
plt.colorbar(p, ax=[ax1, ax2, ax3]) 

我通過所有軸的列表colorbar這裏,使彩條收縮所有三個次要情節中爲了騰出空間。如果省略此項,則僅從最後一個子圖中獲取空間,從而使此子圖的寬度小於其他子圖的寬度。完整的代碼的

複製粘貼我用來測試這一點:

import matplotlib.pyplot as plt 
import numpy as np 

rmax0 = np.random.rand(1000) * 700 
rmax1 = np.random.rand(1000) * 700 
rmax2 = np.random.rand(1000) * 700 
fspd = np.random.rand(1000) * 10 

ax1 = plt.subplot(131) 
nice = plt.get_cmap('BuPu') 
bins1 = np.arange(0,700,700/50.0) 
bins2 = np.arange(0,10,10/50.0) 
h,xedges,yedges = np.histogram2d(rmax0,fspd,bins=[bins1,bins2],normed=True) 
X,Y = np.meshgrid(xedges,yedges) 
ax1.pcolormesh(X, Y, h,cmap=nice) 
ax1.set_aspect('auto') 
plt.xlim([0,200]) 
plt.ylim([0,10]) 

ax2 = plt.subplot(132) 
h,xedges,yedges = np.histogram2d(rmax1,fspd,bins=[bins1,bins2],normed=True) 
X,Y = np.meshgrid(xedges,yedges) 
ax2.pcolormesh(X, Y, h,cmap=nice) 
ax2.set_aspect('auto') 
plt.xlim([0,200]) 
plt.ylim([0,10]) 

ax3 = plt.subplot(133) 
h,xedges,yedges = np.histogram2d(rmax2,fspd,bins=[bins1,bins2],normed=True) 
X,Y = np.meshgrid(xedges,yedges) 
p = ax3.pcolormesh(X, Y, h,cmap=nice) 
ax3.set_aspect('auto') 
plt.xlim([0,200]) 
plt.ylim([0,10]) 
plt.colorbar(p, ax=[ax1, ax2, ax3]) 

plt.show() 
+0

感謝您的幫助 - 我甚至沒有看到我的代碼set_aspect線。我刪除了colorbar命令中的ax = [ax1,ax2,ax3]部分,並繪製在我的第三個子圖的右側。如果我保留它,它會將顏色條右側繪製在第三個子區域的頂部。 – edub 2015-02-17 22:23:33