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

使用twinx时如何添加图例?解决重复图例问题

解决双Y轴图表重复图例问题

问题出在你没有显式保存第一个坐标轴对象,依赖plt.gca()获取当前轴时,创建双轴后可能指向错误的轴,导致图例项被重复收集。以下是修正后的代码:

import numpy as np
import pandas as pd  # 补充缺失的pandas导入
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime, timedelta

df = pd.read_csv('FireCountPenchMar2012.csv')
print(df)

xaxis = np.arange(0,248,1)
yaxis = hdwi
yaxis2 = df.fire_count
print(yaxis2)

# 创建日期序列
start_date = datetime(2023, 3, 1, 0, 0, 0)
dates = [start_date + timedelta(hours=3*i) for i in range(len(xaxis))]

plt.figure(figsize=(15,10))

# 显式获取第一个坐标轴ax1
ax1 = plt.gca()
# 在ax1上绘制第一个变量
line1, = ax1.plot(dates, yaxis, 'o-g', label='HDWI')
ax1.set_ylabel('HDW')
ax1.set_title('HDWI v/s Fire Counts')

# 创建双Y轴ax2
ax2 = ax1.twinx()
# 在ax2上绘制第二个变量
scatter1 = ax2.scatter(dates, yaxis2, color='red', label='Fire Counts')
ax2.set_ylabel('Fire Counts')

# 合并两个轴的图例项
handles = [line1, scatter1]
labels = [h.get_label() for h in handles]
# 创建统一图例
plt.legend(handles, labels, loc='upper right')

# 格式化X轴日期
date_format = mdates.DateFormatter('%b %d')
ax1.xaxis.set_major_locator(mdates.DayLocator(interval=2))
ax1.xaxis.set_major_formatter(date_format)

plt.xticks(rotation=45)
plt.grid()
plt.tight_layout()
plt.show()

关键修改点:

  • 显式保存第一个坐标轴ax1,避免后续调用plt.gca()时混淆轴对象
  • 直接获取绘图返回的句柄(line1,和scatter1),确保只收集每个变量对应的单个图例项
  • 合并句柄后统一创建图例,避免重复添加

内容的提问来源于stack exchange,提问作者Nouredin Modl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:46:21