2017-02-14 29 views
0

我有兩個不同的數據集。一個是nxM矩陣,另一個是Lx3熊貓數據幀。我在等值線圖(NxM)頂部覆蓋散點圖(Lx3數據幀),並且顏色條基於散點圖數據進行縮放。 如何根據兩個數據集強制調整顏色條(如何同步兩個圖層上的顏色條)python pyplot:contourf上的colorbar和散佈在同一個plot中

import numpy as np 
import matplotlib.pyplot as plt 

#generate random matrix with min value of 1 and max value 5 
xx = np.random.choice(a = [1,2,3,4,5],p = [1/5.]*5,size=(100,100)) 

#contourf plot of the xx matrix 
plt.contourf(np.arange(100),np.arange(100),xx) 

#generate x and y axis of the new dataframe 
dfxy = np.random.choice(range(20,80),p = [1/float(len(range(20,80)))]*len(range(20,80)),size = (100,2)) 

#generate z values of the dataframe with min value 10 and max value 15 
dfz = np.random.choice(a = np.linspace(10,15,10),p = [1/10.]*10,size = 100) 
plt.scatter(dfxy[:,0],dfxy[:,1],c=dfz,s=80) 
cb = plt.colorbar() 
#cb.set_clim([1,15]) 
plt.show() 

我設定了限制,但結果對我來說仍然沒有意義。 contourf似乎仍然不在顏色欄中顯示。 enter image description here

回答

2

您需要對兩個繪圖使用相同的顏色標準化。這可以通過使用norm關鍵字參數爲兩個圖提供matplotlib.colors.Normalize實例來完成。

import matplotlib.pyplot as plt 
import matplotlib.colors 
import numpy as np 

#generate random matrix with min value of 1 and max value 5 
xx = np.random.choice(a = [1,2,3,4,5],p = [1/5.]*5,size=(100,100)) 
#generate x and y axis of the new dataframe 
dfxy = np.random.choice(range(20,80),p = [1/float(len(range(20,80)))]*len(range(20,80)),size = (100,2)) 
#generate z values of the dataframe with min value 10 and max value 15 
dfz = np.random.choice(a = np.linspace(0,7,10),size = 100) 


mi = np.min((dfz.min(), xx.min())) 
ma = np.max((dfz.max(), xx.max())) 
norm = matplotlib.colors.Normalize(vmin=mi,vmax=ma) 
plt.contourf(np.arange(100),np.arange(100),xx, norm=norm, cmap ="jet") 
plt.scatter(dfxy[:,0],dfxy[:,1],c=dfz,s=80, norm=norm, cmap ="jet", edgecolor="k") 
cb = plt.colorbar() 

plt.show() 

這裏兩個圖共享相同的顏色方案,因此可以使用單個顏色條。

+0

謝謝!有用 – kthouz