如何使用Python Seaborn绘制双Y轴散点图
用Seaborn实现双Y轴散点图的方法
Seaborn本身没有直接封装双Y轴的专用接口,结合Matplotlib的twinx()方法即可实现对应样式,以下是完整实现流程:
- 第一步:导入依赖库
import seaborn as sns import matplotlib.pyplot as plt import pandas as pd import numpy as np
- 第二步:准备数据(示例模拟数据可替换为你的实际数据)
# 构造X轴、两个Y轴的模拟数据 x = np.arange(20) y1 = np.random.randint(10, 100, size=20) # 第一个Y轴数据,量级更大 y2 = np.random.uniform(0, 5, size=20) # 第二个Y轴数据,量级更小 # 转为DataFrame适配Seaborn的调用规范 df = pd.DataFrame({'x轴字段':x, '指标1':y1, '指标2':y2})
- 第三步:绘制双Y轴散点图
# 预设Seaborn绘图样式 sns.set_style("whitegrid") fig, ax1 = plt.subplots(figsize=(10,6)) # 绘制第一个Y轴对应的散点 sns.scatterplot( data=df, x='x轴字段', y='指标1', color='#1f77b4', s=80, ax=ax1, label='指标1' ) # 配置第一个Y轴样式 ax1.set_ylabel('指标1数值', fontsize=12, color='#1f77b4') ax1.tick_params(axis='y', labelcolor='#1f77b4') ax1.set_xlabel('X轴数值', fontsize=12) # 生成第二个Y轴 ax2 = ax1.twinx() # 绘制第二个Y轴对应的散点 sns.scatterplot( data=df, x='x轴字段', y='指标2', color='#ff7f0e', s=80, ax=ax2, label='指标2' ) # 配置第二个Y轴样式 ax2.set_ylabel('指标2数值', fontsize=12, color='#ff7f0e') ax2.tick_params(axis='y', labelcolor='#ff7f0e') # 合并两个轴的图例,避免图例重叠 handles1, labels1 = ax1.get_legend_handles_labels() handles2, labels2 = ax2.get_legend_handles_labels() ax1.legend(handles1 + handles2, labels1 + labels2, loc='upper left') plt.tight_layout() plt.show()
常用样式调整说明
- 散点大小、形状:修改
sns.scatterplot的s参数调整大小,marker参数调整形状(比如marker='^'用三角标记) - 配色调整:修改
color参数即可自定义两个系列的散点颜色 - 刻度范围:分别调用
ax1.set_ylim(最小值, 最大值)、ax2.set_ylim(最小值, 最大值)自定义两个Y轴的显示范围 - 增加拟合线:将
sns.scatterplot替换为sns.regplot,保留其他参数即可同时显示散点和拟合趋势线
内容的提问来源于stack exchange,提问作者CWWW
相关产品推荐
相关产品推荐

