Matplotlib双轴图表X轴标签旋转90度失效问题求助
解决Matplotlib双轴图表X轴标签旋转失效问题
问题根源在于双轴图表中,全局plt.xticks()的作用对象会切换到twinx()创建的ax2轴,但ax2的X轴是与ax1共享的隐藏轴,直接调用全局方法无法对实际显示的X轴(属于ax1)生效。
修复方案
提供两种可靠的修复方式:
方式1:设置刻度时直接指定旋转角度
将原本分开的两行X轴刻度代码合并,在plt.xticks()中直接添加旋转参数:
plt.xticks(np.arange(min(rok), max(rok)+1), rotation=90)
方式2:直接操作ax1的X轴刻度属性
因为X轴本质属于ax1,直接针对ax1设置刻度旋转更精准:
ax1.set_xticks(np.arange(min(rok), max(rok)+1)) ax1.tick_params(axis='x', rotation=90)
修改后的完整代码
%matplotlib inline fig, ax1 = plt.subplots() color = 'tab:red' ax1.set_xlabel('Rok') ax1.set_ylabel('Liczba loch', color=color) ax1.plot(rok, lochy, color=color, marker="D") ax1.tick_params(axis='y', labelcolor=color) ax2 = ax1.twinx() color = 'tab:blue' ax2.set_ylabel('Liczba knurów', color=color) ax2.plot(rok, knury, color=color, marker="o") ax2.tick_params(axis='y', labelcolor=color) plt.title(f"Liczba użytkowanych knurów i loch w województwie {wojewodztwo}, w stadzie {stado} na przestrzeni lat") plt.grid() fig.tight_layout() # 避免右侧Y轴标签被截断 # 使用方式1的写法设置带旋转的X轴刻度 plt.xticks(np.arange(min(rok), max(rok)+1), rotation=90) plt.savefig('wykres.png', dpi=300, bbox_inches='tight')
原理:双轴场景下,plt全局函数默认作用于最后创建的轴(此处为ax2),但ax2的X轴是隐藏状态,实际显示的X轴归属于ax1。直接操作ax1或在设置刻度时明确指定旋转角度,才能让X轴标签正确旋转90度。
内容的提问来源于stack exchange,提问作者mlodycezar
相关产品推荐
相关产品推荐

