You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为双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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:27:04