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

matplotlib使用twinx()绘制子图时数量翻倍及报错问题求解

问题产生原因
  • 多余空白子图:你代码中额外创建了fig2,ax2 = plt.subplots(6,1, figsize=(20,10),dpi=300)这第二套画布与子图对象,全程没有在这套子图上绘制任何内容,显示出来就是6个空白子图。双Y轴通过twinx()在现有子图上生成即可,不需要提前新建独立的画布和子图数组。
  • too many values to unpack报错:你参考的回答中采用的是单张子图或者特殊布局的双轴解包写法,比如fig, (ax1, ax2) = plt.subplots(...),但你用的是6行1列的子图布局,plt.subplots返回的ax是长度为6的一维数组,无法直接拆分为两个变量赋值,就会触发解包数量不匹配的报错。
解决方法

直接删除第二套画布的创建代码,在循环中逐个生成对应子图的双Y轴即可,修正后的代码如下:

fig, ax1 = plt.subplots(6,1, figsize=(20,10), dpi=300)
# 若需要后续复用双Y轴对象,可初始化列表存储
ax2 = []

for index, val in enumerate(datedf.columns):
    # 绘制左侧Y轴数据
    ax1[index].plot(datedf.index, datedf[val], color=colors[index])
    ax1[index].set(ylim=[-100, 6500])
    # 生成当前子图的双Y轴
    curr_ax2 = ax1[index].twinx()
    ax2.append(curr_ax2)
    # 绘制右侧Y轴数据
    curr_ax2.plot(qtydf.index, qtydf[val], color=colors[index], alpha=0.5)
    curr_ax2.set(ylim=[200, 257000])

# 可添加下方语句自动调整子图间距,避免标签重叠
fig.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:45:05