如何调整seaborn散点图数据点透明度 解决stroke=1点被stroke=0遮挡问题
散点图类别遮挡问题解决方法
你可以通过以下几种方案解决stroke=1的点被遮挡的问题:
- 调整绘图顺序,将stroke=1的点放在上层绘制
可以通过指定hue_order参数,让stroke=0先绘制,stroke=1后绘制,后者自然会覆盖在上层:
sns.scatterplot(x = df.Age, y=df.Bmi, hue = df.Stroke, hue_order=[0,1])
如果想要更灵活的控制,也可以拆分数据集分别绘制:
# 先绘制stroke=0的点 sns.scatterplot(x = df[df.Stroke==0].Age, y=df[df.Stroke==0].Bmi, color = '#1f77b4') # 再绘制stroke=1的点 sns.scatterplot(x = df[df.Stroke==1].Age, y=df[df.Stroke==1].Bmi, color = '#ff7f0e')
- 增加点的透明度,让重叠区域的层级更明显
给所有点设置统一的透明度,即使被遮挡也能看出下层的点分布:
sns.scatterplot(x = df.Age, y=df.Bmi, hue = df.Stroke, alpha=0.6)
- 给stroke=1的点增加样式区分
可以给stroke=1的点设置更大的尺寸、或者白色描边,更容易和下层的stroke=0的点区分开:
# 按stroke类别设置不同点大小+描边 sns.scatterplot(x = df.Age, y=df.Bmi, hue = df.Stroke, size=df.Stroke, sizes=[20, 60], edgecolor='white')
- 分面绘制两个类别
直接将两个类别的散点图分成两个子图绘制,完全避免遮挡问题:
sns.relplot(x = 'Age', y='Bmi', hue = 'Stroke', col='Stroke', data=df, kind='scatter')
内容的提问来源于stack exchange,提问作者Zndjld Ahmed
相关产品推荐
相关产品推荐

