如何为双Y轴的两个seaborn折线图添加图例并修改Y轴标签
完整实现代码
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt d = {'month': [1, 2, 3, 4], 'price': [79.00, 80.00, 90.00, 20.00]} df = pd.DataFrame(data=d) # 修正原字段名末尾多余的空格,避免取值报错 d2 = {'month': [1, 2, 3, 4], 'available': [5000, 8000,5000, 7000]} df2 = pd.DataFrame(data=d2) f, ax = plt.subplots(figsize=(15, 6)) # 给折线添加label参数指定图例文本 plt1 = sns.lineplot(x = 'month',y = 'available', data = df2,color="red", label='available') # 设置左Y轴标签 ax.set_ylabel('available') ax2 = ax.twinx() # 给第二条折线添加label参数 plt2 = sns.lineplot(x = 'month' ,y = 'price', data=df,ax=ax2,linestyle=':',color="#1167b1", label='price') # 设置右Y轴标签 ax2.set_ylabel('price') # 合并两个轴的图例句柄和标签,统一显示 lines = [plt1.get_lines()[0], plt2.get_lines()[0]] labels = [line.get_label() for line in lines] ax.legend(lines, labels) plt.show()
核心修改说明
- 修正了
df2中available字段名末尾多余的空格,避免索引列时报错 - 给两个
sns.lineplot添加label参数,指定对应图例显示的文本 - 分别调用
ax.set_ylabel和ax2.set_ylabel设置左右Y轴的标签 - 手动收集两条折线的句柄,合并后通过
ax.legend生成统一的图例,解决双Y轴场景下图例分散不显示的问题
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

