Matplotlib绘制10张子图仅显示9个标题的问题求解
问题原因
标题设置和子图创建的顺序颠倒,且使用了plt.title()这类依赖当前活跃轴的全局方法,导致标题没有对应到正确的子图上:
- 第1次循环先执行
plt.title()时还未创建子图,标题被设置到画布默认空白轴上,随后创建的第1张子图未拿到对应标题 - 第210次循环执行`plt.title()`时,当前活跃轴是上一次循环创建的第19张子图,因此标题依次对应到了第1到第9张子图
- 第10张子图创建完成后没有后续的标题设置逻辑,最终仅9张子图显示标题
解决方法
调整代码顺序,在子图创建完成后,直接通过子图对象ax的set_title方法设置标题,避免全局方法的隐式逻辑出错。修正后代码如下:
plt.figure(figsize=(25,10)) plt.subplots_adjust(left=0.125, bottom=0.1, right=0.9, top=0.9, wspace=0.2, hspace=0.4) n = 1 for idx, i in enumerate(top_10_df_event_copy['Code'].unique()): top_10_df_event_copy_list[i] = pd.Series(winsorize(top_10_df_event_copy_list[i].values, limits=[0, 0.1])) stl = seasonal_decompose(top_10_df_event_copy_list[i].values, freq=3) ax = plt.subplot(4,3,n) # 子图创建完成后再设置对应标题 ax.set_title(f"{i}", fontsize=15) ax.plot(stl.seasonal + stl.trend) ax.plot(stl.observed, color='red', alpha=0.5) n += 1 print(i) plt.show()
内容的提问来源于stack exchange,提问作者Ironman
相关产品推荐
相关产品推荐

