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

子图X轴标签旋转问题:设置双图旋转70度未全部生效

解决Matplotlib/Seaborn子图X轴标签仅部分旋转的问题

问题出在你使用了全局的plt.xticks()方法——它只会对当前活跃的坐标轴生效,而当你切换子图绘制时,当前活跃轴会跟着变化,导致只有最后一个子图的刻度被正确旋转。

正确的解决方案有两种:

1. 直接操作每个子图的轴对象

对每个ax元素单独设置刻度旋转,这种方式最直观,也不会受当前轴切换的影响:

fig, ax = plt.subplots(1,2, figsize = (30, 8))
# 绘制第一个子图并设置X轴刻度旋转
g1 = sns.lineplot(data = plsWeekly , x = 'Date', y = 'Close', ax=ax[0])
ax[0].tick_params(axis='x', rotation=70)
# 绘制第二个子图并设置X轴刻度旋转
g2 = sns.lineplot(data = asxWeekly , x = 'Date', y = 'Close', ax=ax[1])
ax[1].tick_params(axis='x', rotation=70)

2. 批量设置所有子图的刻度

如果子图数量较多,可以用plt.setp()批量处理,避免重复代码:

fig, ax = plt.subplots(1,2, figsize = (30, 8))
sns.lineplot(data = plsWeekly , x = 'Date', y = 'Close', ax=ax[0])
sns.lineplot(data = asxWeekly , x = 'Date', y = 'Close', ax=ax[1])
# 批量旋转所有子图的X轴标签
plt.setp([a.get_xticklabels() for a in ax], rotation=70)

为什么原代码失效?

plt.xticks(rotation=70)本质是修改当前活跃轴的刻度。在你调用sns.lineplot(ax=ax[1])后,Matplotlib会把ax[1]设为当前活跃轴,因此最后一次plt.xticks()只会作用于它,而第一个子图的刻度设置可能被Seaborn的绘图过程覆盖,或者根本没生效。

内容的提问来源于stack exchange,提问作者Aris dela Cruz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:30:25