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
相关产品推荐
相关产品推荐

