如何修改seaborn图例样式 将pIC50项设置为尺寸匹配的无填充空心圆
Seaborn散点图图例pIC50项改为空心圆形的实现方法
以下是修改后的可运行代码,仅需在原有逻辑基础上增加图例手柄属性调整步骤即可实现需求:
import seaborn as sns import matplotlib.pyplot as plt # seaborn样式设置需放在绘图前才能生效 sns.set_style("whitegrid", {"ytick.major.size": 100,"xtick.major.size": 2, 'grid.linestyle': 'solid'}) plt.figure(figsize=(7, 7)) sns.scatterplot(x='MW', y='LogP', data=df_2class, hue='class', size='pIC50', edgecolor='black', alpha=0.2) plt.xlabel('MW', fontsize=14, fontweight='bold') plt.ylabel('LogP', fontsize=14, fontweight='bold') # 接收plt.legend返回的图例对象 leg = plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0) # 调整pIC50对应图例项样式:此处假设class字段共2个分类,前2个图例项为class分类,后续都是pIC50项 # 可根据实际class的分类数量调整切片的起始索引 for handle in leg.legend_handles[2:]: handle.set_facecolor('none') # 清除内部填充 handle.set_edgecolor('black') # 保留黑色描边 handle.set_alpha(1) # 可选配置:如果需要图例边框不透明可修改alpha值 plt.show()
补充说明:
- 不确定class分类数量的情况,可先打印
len(df_2class['class'].unique())获取数值后再调整切片起始索引 - 若需要图中的散点也同步改为空心样式,直接在
sns.scatterplot的参数中添加facecolor='none'即可 - 旧版本Matplotlib可将代码中的
leg.legend_handles替换为leg.get_handles()使用
内容的提问来源于stack exchange,提问作者tassaneel
相关产品推荐
相关产品推荐

