python pyplot:contourf上的颜色条和散点图在同一图中

2024-01-01

我有两个不同的数据集。一个是 numpy NxM 矩阵,另一个是 Lx3 pandas 数据框。我将散点图(Lx3 数据帧)叠加在等高线图(NxM)之上,并且颜色条根据散点图数据进行缩放。如何强制颜色条根据两个数据集进行缩放(如何同步两个绘图层上的颜色条)?

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

I trie to set limits but the results still don't make sense to me. The contourf still doesn't seem to be represented in the colorbar. enter image description here


您需要对两个图使用相同的颜色标准化。这可以通过提供一个来完成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()

这里两个图共享相同的配色方案,因此可以使用单个颜色条。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python pyplot:contourf上的颜色条和散点图在同一图中 的相关文章

随机推荐