如何从散点图组合两个matplotlib(python)颜色贴图

如何从散点图组合两个matplotlib(python)颜色贴图,python,matplotlib,Python,Matplotlib,我正在尝试将两个彩色地图图例合并为一个。颜色值由第三(z)个数据定义。 我正在尝试用两种颜色方案绘制一个图例颜色图 来自scipy.optimize import curve\u fit的 将matplotlib.pyplot作为plt导入 将numpy作为np导入 作为pd进口熊猫 df=pd.read\u excel('C:\\Users\user1\\PycharmProjects\\untitled\\Python\u test.xlsx') x=df['Vp_dry'] y=df['V

我正在尝试将两个彩色地图图例合并为一个。颜色值由第三(z)个数据定义。 我正在尝试用两种颜色方案绘制一个图例颜色图

来自scipy.optimize import curve\u fit的

将matplotlib.pyplot作为plt导入
将numpy作为np导入
作为pd进口熊猫
df=pd.read\u excel('C:\\Users\user1\\PycharmProjects\\untitled\\Python\u test.xlsx')
x=df['Vp_dry']
y=df['Vs_dry']
q=df['Vp_湿']
w=df['Vs_湿']
图,ax=plt.子批次()
popt,pcov=曲线拟合(λfx,a,b:a*fx**-b,x,y)
x_linspace=np.linspace(最小(x-100)、最大(x+100)、100)
power_y=popt[0]*x_linspace**-popt[1]
ax1=plt.scatter(x,y,c=df['porsity'],cmap=plt.cm.Greys,vmin=2,vmax=df['porsity'].max(),edgecolors=“#b6bbd”)
plt.plt(x_linspace,power_y,color='grey',label='Dry')
popt,pcov=曲线拟合(λfx,a,b:a*fx**-b,q,w)
q_linspace=np.linspace(最小(q-100),最大(q+100),100)
power\u w=popt[0]*q\u linspace**-popt[1]
ax2=plt.scatter(q,w,c=df['porsity'],cmap=plt.cm.Blues,vmin=2,vmax=df['porsity'].max(),edgecolors=“#3D83C1”)
plt.plot(q_linspace,power_w,label='Wet')
cbar=图颜色条(ax2)
cbar=图颜色条(ax1)
cbar.set_标签(“孔隙度(%)”)
plt.xlabel('Vp(m/s)'
plt.ylabel(‘Vs(m/s)’)
plt.grid()
plt.legend()
plt.show()

期望的结果:

您似乎需要一个带有两个颜色贴图组合的颜色栏,其中一个颜色贴图反转,并将刻度更改为百分比值

一种方法是手动创建第二个子图,使用两个图像并使其看起来像一个色条:

导入matplotlib.pyplot作为plt
将matplotlib.ticker作为mtick导入
将numpy作为np导入
#首先创建一些要打印的虚拟数据
N=100
x=np.随机均匀(0,10,N)
y=np.随机.正常(15,2,N)
q=np.随机均匀(0,10,N)
w=np.随机.正常(10,2,N)
df_孔隙度=np.随机均匀(0,5,N)
图(ax,ax2)=plt.子批次(ncols=2,figsize=(6,4),gridspec_-kw={“宽度比”:[1,0.08]})
图1=最大散点(x,y,c=df#U孔隙度,cmap=plt.cm.Greys,vmin=2,vmax=df#U孔隙度.max(),edgecolors=“#B6BBD”)
图2=最大散点(q,w,c=df#U孔隙度,cmap=plt.cm.Blues,vmin=2,vmax=df#U孔隙度.max(),edgecolors=“#3D83C1”)
img_cbar=np.linspace(0,1,256)。重塑(256,1)
ax2.imshow(img_cbar,cmap=plt.cm.Blues,extent=[0,1,1,0])#aspect='auto')
ax2.imshow(img_cbar,cmap=plt.cm.Greys,extent=[0,1,-1,0])
ax2.set_ylim(-1,1)
ax2.设置方面(10)
ax2.set_ylabel(“孔隙度(%)”)
ax2.yaxis.设置标签位置(“右”)
ax2.set_xticks([])
ax2.yaxis.tick_right()
#(可选)以百分比形式显示刻度,其中1.0对应于100%
ax2.yaxis.set\u major\u格式化程序(mtick.PercentFormatter(1.0))
plt.紧_布局()
plt.show()

谢谢约翰。顺致敬意,