2017-02-14 22 views
0

У меня есть два разных набора данных. Один из них представляет собой матричную матрицу NxM, а другой - файл данных Lx3 pandas. Я накладываю график разброса (Lf3) на вершину контура (NxM), а цветная панель масштабируется на основе данных графика разброса. Как я могу заставить шкалу цветов масштабироваться на основе обоих наборов данных (Как синхронизировать панель цветов на обоих графических слоях)?python pyplot: colorbar on contourf и разброс в том же сюжете

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() 

Я пытаюсь установить лимиты, но результаты по-прежнему не имеют для меня смысла. Контур по-прежнему не представляется в цветной панели. enter image description here

ответ

2

Для обеих графиков вам необходимо использовать такую ​​же нормализацию цвета. Это может быть выполнено путем предоставления экземпляра matplotlib.colors.Normalize для обоих графиков с использованием аргумента ключевого слова norm.

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

 Смежные вопросы

  • Нет связанных вопросов^_^