Matplotlib多子图中plt.xticks设置仅单图生效问题
问题原因
plt.xticks() 属于Matplotlib的pyplot状态机接口,默认仅对当前处于激活状态的子图生效。你的代码中最后操作的子图是右侧的gr1,因此刻度设置只会应用在gr1上,不会影响更早创建的左侧子图gr0。
解决方法
不要依赖pyplot全局接口做多子图的样式配置,直接调用子图对象自带的方法设置即可,两种常用实现:
- 少量子图场景:逐个为子图设置x轴刻度样式
fig, (gr0, gr1) = plt.subplots(ncols=2, constrained_layout=True, figsize = (17,7)) # 左子图 gr0.plot(data['g1']) gr0.set_title('text 1') gr0.tick_params(axis='x', labelsize=8, rotation=45) # 右子图 gr1.plot(data['g2']) gr1.set_title('text 2') gr1.tick_params(axis='x', labelsize=8, rotation=45) plt.show()
- 多子图场景:遍历画布下所有子图批量统一设置,避免重复代码
fig, (gr0, gr1) = plt.subplots(ncols=2, constrained_layout=True, figsize = (17,7)) gr0.plot(data['g1']) gr0.set_title('text 1') gr1.plot(data['g2']) gr1.set_title('text 2') # 批量给所有子图应用x轴刻度样式 for ax in fig.axes: ax.tick_params(axis='x', labelsize=8, rotation=45) plt.show()
效果参考

注:使用面向对象的Axes接口配置子图样式,可以完全避开pyplot状态机的激活对象切换问题,样式控制更精准,不会出现部分子图配置不生效的问题。
内容的提问来源于stack exchange,提问作者catlean
相关产品推荐
相关产品推荐

