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

使用pandas双Y轴绘图时自定义X轴标签旋转45度无效的解决方法

解决Pandas绘图时X轴标签旋转不生效的问题

我尝试将X轴标签旋转45度,但运行以下代码后标签仍保持0度旋转,请问该如何解决?

df_final = pd.DataFrame({'Count':[8601,188497,808,7081,684,15601,75,12325],
                         'Average': [0.128,0.131,0.144,.184,.134,.152,0.139,0.127]})
width = 0.8
df_final['Count'].plot(kind='bar', width = width)
df_final['Average'].plot(secondary_y=True)
ax = plt.gca()
ax.set_xticklabels(['One', 'Two', 'Three', 'Four', 'Five','Six','Seven','Eight'],rotation = 45)
plt.show()

问题原因

你代码里的plt.gca()获取的是次y轴对应的轴对象(因为你用了secondary_y=True绘制第二个轴),这个轴的X标签默认隐藏,所以设置它的旋转参数不会影响到条形图的X轴标签。真正控制条形图X轴的是第一个轴(主y轴对应的轴)。

解决方案

方法1:保存主轴引用并设置

绘图时保存主条形图的轴对象,直接对它设置X轴标签:

import pandas as pd
import matplotlib.pyplot as plt

df_final = pd.DataFrame({'Count':[8601,188497,808,7081,684,15601,75,12325],
                         'Average': [0.128,0.131,0.144,.184,.134,.152,0.139,0.127]})
width = 0.8
# 保存主条形图的轴对象
ax_main = df_final['Count'].plot(kind='bar', width=width)
# 基于主轴绘制次轴折线图
df_final['Average'].plot(secondary_y=True, ax=ax_main)
# 对主轴设置X轴标签和旋转角度
ax_main.set_xticklabels(['One', 'Two', 'Three', 'Four', 'Five','Six','Seven','Eight'], rotation=45)
plt.show()

方法2:直接用plt.xticks()设置

跳过轴对象的获取,直接用全局方法设置X轴标签和旋转:

import pandas as pd
import matplotlib.pyplot as plt

df_final = pd.DataFrame({'Count':[8601,188497,808,7081,684,15601,75,12325],
                         'Average': [0.128,0.131,0.144,.184,.134,.152,0.139,0.127]})
width = 0.8
df_final['Count'].plot(kind='bar', width=width)
df_final['Average'].plot(secondary_y=True)
# 直接设置X轴刻度的标签和旋转角度
plt.xticks(ticks=range(8), labels=['One', 'Two', 'Three', 'Four', 'Five','Six','Seven','Eight'], rotation=45)
plt.show()

方法3:获取正确的轴对象

通过plt.gcf().axes[0]获取figure中的第一个轴(主X轴所在的轴):

import pandas as pd
import matplotlib.pyplot as plt

df_final = pd.DataFrame({'Count':[8601,188497,808,7081,684,15601,75,12325],
                         'Average': [0.128,0.131,0.144,.184,.134,.152,0.139,0.127]})
width = 0.8
df_final['Count'].plot(kind='bar', width=width)
df_final['Average'].plot(secondary_y=True)
# 获取主X轴所在的轴对象(figure的axes列表第一个元素)
ax_main = plt.gcf().axes[0]
ax_main.set_xticklabels(['One', 'Two', 'Three', 'Four', 'Five','Six','Seven','Eight'], rotation=45)
plt.show()

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:02:46