You need to enable JavaScript to run this app. 基于Matplotlib绘制3个不同刻度Y轴时间序列数据的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

基于Matplotlib绘制3个不同刻度Y轴时间序列数据的问题求助

问题核心原因

你原代码的核心报错原因是变量覆盖错误:初始定义的ax1/ax2/ax3是坐标轴实例对象,后续调用plot方法时你直接把返回的折线对象赋值给了同名变量,导致后续调用坐标轴属性(如.yaxis、.spines)时找不到对应方法。

修正后可运行代码

import pandas as pd
import matplotlib.pyplot as plt

# 假设output_params是你的时间序列DataFrame,这里保留你的原有变量名
fig, ax1 = plt.subplots(figsize=(12,10))
    
# 生成三个Y轴,第三个Y轴向右偏移60像素避免重叠
ax2 = ax1.twinx()
ax3 = ax1.twinx()
ax3.spines['right'].set_position(('outward', 60))

# 1. 单独设置每个Y轴的刻度范围
ax1.set_ylim(0, 10)
ax2.set_ylim(0, 100)
ax3.set_ylim(0, 1000)

# 设置Y轴标签
ax1.set_ylabel("Output Current")
ax2.set_ylabel("Output Voltage")
ax3.set_ylabel("Output Power")

# 定义三个指标对应的颜色
color1 = plt.cm.viridis(0)
color2 = plt.cm.viridis(0.5)
color3 = plt.cm.viridis(.9)

# 绘制折线,保留坐标轴变量,单独存折线对象用于图例
line1, = ax1.plot(output_params.index, output_params.Output_Current, color=color1, label= 'Output Current')
line2, = ax2.plot(output_params.index, output_params.Output_Voltage, color=color2, label='Output Voltage')
line3, = ax3.plot(output_params.index, output_params.Output_Power, color=color3, label='Output Power')

# 2. 为每个Y轴的标签、刻度设置对应匹配的颜色
ax1.yaxis.label.set_color(color1)
ax1.tick_params(axis='y', colors=color1)
ax2.yaxis.label.set_color(color2)
ax2.tick_params(axis='y', colors=color2)
ax3.yaxis.label.set_color(color3)
ax3.tick_params(axis='y', colors=color3)

# 3. 合并所有折线的handle,统一展示图例
lines = [line1, line2, line3]
ax1.legend(handles=lines, loc='best')

# 自动调整布局避免标签被截断
fig.tight_layout()
plt.show()

实现说明

  • 单独调整Y轴范围:直接调用各个坐标轴的set_ylim()方法即可,参数分别为最小值、最大值,可根据你的数据实际分布修改
  • Y轴配色匹配:除了Y轴标签,额外添加了刻度颜色的匹配,视觉一致性更强
  • 图例配置:单独存储每个plot返回的折线对象,统一传入legend的handles参数即可正常显示所有指标的图例

优化建议

  • 如果你的时间序列需要交互查看数值,可以用plotly库实现多Y轴绘图,代码更简洁,还支持缩放、悬停看数值、导出图片等功能
  • 若三个指标的波动趋势差异大,可以给每个Y轴添加网格线,注意网格线颜色和对应Y轴保持一致,避免视觉混乱
  • 可以根据数据的实际量级自动计算ylim,比如取对应指标最大值的1.1倍作为上限,避免硬编码范围适配性差的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 02:00:05