Python 对于带有matplotlib的散点图,如何在图例渐变中包含点大小和颜色?

Python 对于带有matplotlib的散点图,如何在图例渐变中包含点大小和颜色?,python,matplotlib,plot,legend,Python,Matplotlib,Plot,Legend,我使用python中的matplotlib创建了两个散点图,代码的数据如下: 创建的图如下所示: 因此,点大小(在ax3中)和点颜色(在ax1和ax3中)是从包含浮点数的数组中获取的,浮点数的各种值都在[0,1]范围内。我的问题:如何创建一个图例来显示相应的y值,比如说5种不同的点大小和5种不同的颜色细微差别? 我希望图例如下图所示(来源),但如果可能的话,将颜色栏和尺寸栏放在一个图例中。谢谢你的建议和代码 #在数据帧df中使用数据 #创建s2 df['s2']=(20*(1.1-df.arr

我使用python中的
matplotlib
创建了两个散点图,代码的数据如下:

创建的图如下所示:

因此,点大小(在ax3中)和点颜色(在ax1和ax3中)是从包含浮点数的数组中获取的,浮点数的各种值都在[0,1]范围内。我的问题:如何创建一个图例来显示相应的y值,比如说5种不同的点大小和5种不同的颜色细微差别?

我希望图例如下图所示(来源),但如果可能的话,将颜色栏和尺寸栏放在一个图例中。谢谢你的建议和代码

#在数据帧df中使用数据
#创建s2
df['s2']=(20*(1.1-df.arr))**3.5
图=plt.图(图尺寸=(20,12))
ax1=图add_子批次(111)
ax3=ax1.twinx()
标准=正常化(vmin=0.95*min(df.arr),vmax=1.05*max(df.arr))
p1=ax1.散射(df.x,df.y1,s=20,c=df.arr,cmap='Blues\u r',norm=norm,marker='x')
图颜色条(p1,标签='arr')
p2=ax3.scatter(df.x,df.y2,s=df.s2,c=df.arr,cmap='Reds\u r',norm=norm,marker='^')
图颜色条(p2,标签='arr')
#创建红色的尺寸图例
对于[15,80,150]中的x:
plt.scatter([],[],c='r',alpha=1,s=x,label=str(x),marker='^')
plt.legend(loc='上中',bbox_to_anchor=(1.23,1),ncol=1,fancybox=True,shadow=True,title='s2')
plt.show()

  • 由于大小是静态的,
    p1
    没有图例
  • 我认为这最好是两个单独的地块
  • 我曾经
分离
fig,(ax1,ax2)=plt.子批次(nrows=2,figsize=(20,10))
标准=正常化(vmin=0.95*min(df.arr),vmax=1.05*max(df.arr))
p1=ax1.散射(df.x,df.y1,s=20,c=df.arr,cmap='Blues\u r',norm=norm,marker='x')
图颜色条(p1,ax=ax1,标签为arr)
p2=ax2.scatter(df.x,df.y2,s=df.s2,c=df.arr,cmap='Reds\u r',norm=norm,marker='^')
图颜色条(p2,ax=ax2,标签为arr)
#创建红色的尺寸图例
对于[15,80,150]中的x:
plt.scatter([],[],c='r',alpha=1,s=x,label=str(x),marker='^')
plt.legend(loc='上中',bbox_to_anchor=(1.2,1),ncol=1,fancybox=True,shadow=True,title='s2')
plt.show()

import matplotlib.pyplot as plt
from matplotlib.colors import Normalize

fig = plt.figure(figsize=(20,12))
ax1 = fig.add_subplot(111)
ax3 = ax1.twinx()

norm = Normalize(vmin=0.95*min(arr), vmax=1.05*max(arr))

ax1.scatter(x, y1, s=20, c=arr, cmap='Blues_r', norm=norm, marker='x', label='bla1')
ax3.scatter(x, y2, s=(20*(1.1-arr))**3.5, c=arr, cmap='Reds_r', norm=norm, marker='^', label='bla1')