matplotlib绘制pandas子图仅最后一个显示x轴标签如何解决
问题描述
绘制多张子图时仅最后一张子图显示x轴日期标签,目标是所有子图下方均正常展示日期类x轴标签。
当前运行效果:
原始实现代码:
import matplotlib.pyplot as plt axes = dfDiscoverNerPivot.plot.line(x="date",subplots=True, legend=True, fontsize=8, grid=False, figsize=(10,25), linewidth=3) plt.xticks(rotation=90) for ax in axes.flatten(): ax.axhline(5000, color='k', linestyle='--') ax.legend(loc='upper center') plt.show()
运行环境:Google Colab,使用pandas、matplotlib库开发。
问题原因
matplotlib绘制纵向排列的子图时,默认会隐藏非最底部子图的x轴刻度标签,避免标签重叠;全局方法plt.xticks()仅会对当前激活的最后一个子图生效,因此只有最后一张子图显示旋转后的日期标签。
修复方案
遍历所有子图轴对象时,单独为每个子图强制开启x轴底部标签显示,同时设置刻度旋转角度,最后加布局自动适配避免标签截断。
修复后完整代码:
import matplotlib.pyplot as plt axes = dfDiscoverNerPivot.plot.line( x="date", subplots=True, legend=True, fontsize=8, grid=False, figsize=(10,25), linewidth=3 ) for ax in axes.flatten(): ax.axhline(5000, color='k', linestyle='--') ax.legend(loc='upper center') # 强制显示当前子图x轴标签,设置90度旋转 ax.tick_params(axis='x', labelbottom=True, rotation=90) # 自动调整布局,避免标签、标题被截断 plt.tight_layout() plt.show()
如果子图垂直间距不足导致标签和上一张子图内容重叠,可以在绘图时传入子图间距参数,修改plot.line的参数为:
axes = dfDiscoverNerPivot.plot.line( x="date", subplots=True, subplot_kw={'hspace': 0.6}, # 调整子图垂直间距,数值越大间距越大 legend=True, fontsize=8, grid=False, figsize=(10,25), linewidth=3 )
内容的提问来源于stack exchange,提问作者user5798201
相关产品推荐
相关产品推荐

