You need to enable JavaScript to run this app. 使用matplotlib实现单x轴双y轴同图绘制训练验证精度与损失曲线
优惠活动
大模型
产品
解决方案
定价
更多

使用matplotlib实现单x轴双y轴同图绘制训练验证精度与损失曲线

修正后可直接复用的绘图实现

核心问题定位

原代码通过叠加3个同位置无框子图的方式实现多曲线绘制,属于冗余操作:既打乱了预设的左右y轴分配逻辑,还会强制清空中间层轴的x轴刻度标签,最后调用的plt.legend()仅能收集到最上层子图的曲线标签,无法完整展示4条曲线的说明信息。

修正实现逻辑

  • 减少冗余子图操作:仅初始化1个基础左轴,专门承载两类误差(训练/验证损失),不再叠加多个同位置无框子图。
  • 通过twinx()方法自动生成和左轴完全共享x轴的右侧独立y轴,专门承载两类精度值(训练/验证精度),从根本上避免x轴错位、重复刻度的问题。
  • 跨轴统一收集所有曲线的句柄和标签,在同一位置渲染全量图例,避免单条曲线标签漏显示的问题。

完整可运行代码

import matplotlib.pyplot as plt

# 初始化画布与左侧基础轴(绑定损失/误差类数值)
fig, ax_loss = plt.subplots(figsize=(8, 5))

# 左轴绘制两条误差曲线
train_loss_curve, = ax_loss.plot(e_t_x, e_t_y, color='#d62728', linestyle='-', linewidth=1.5, label='Training Error')
val_loss_curve, = ax_loss.plot(e_v_x, e_v_y, color='#2ca02c', linestyle='--', linewidth=1.5, label='Validation Error')

# 左轴样式配置
ax_loss.set_xlabel('Iteration Count')
ax_loss.set_ylabel('Error / Loss Value', color='#d62728')
ax_loss.tick_params(axis='y', labelcolor='#d62728')

# 生成共享x轴的右侧独立轴(绑定精度类数值)
ax_acc = ax_loss.twinx()

# 右轴绘制两条精度曲线
train_acc_curve, = ax_acc.plot(a_t_x, a_t_y, color='#1f77b4', linestyle='-', linewidth=1.5, label='Training Accuracy')
val_acc_curve, = ax_acc.plot(a_v_x, a_v_y, color='#ff7f0e', linestyle='--', linewidth=1.5, label='Validation Accuracy')

# 右轴样式配置
ax_acc.set_ylabel('Accuracy Value', color='#1f77b4')
ax_acc.tick_params(axis='y', labelcolor='#1f77b4')

# 统一收集所有曲线生成完整图例
total_curves = [train_loss_curve, val_loss_curve, train_acc_curve, val_acc_curve]
total_labels = [curve.get_label() for curve in total_curves]
ax_loss.legend(total_curves, total_labels, loc='best', framealpha=0.9)

# 自动适配布局避免标签被画布裁切
fig.tight_layout()
plt.show()

实现效果说明

最终画布中x轴统一展示迭代次数,左侧y轴的刻度范围完全匹配两类误差的数值区间,右侧y轴的刻度范围完全匹配两类精度的数值区间,四条曲线无遮挡、全量显示图例,完全匹配预设的双y轴布局要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 19:36:04