Matplotlib双轴图表排序异常及X轴标签替换问题求助
问题修复方案
1. 解决次轴排序异常问题
你的排序异常本质是两个数据集的索引/分类未对齐,之前用zip()操作轴对象的方式完全错误——ax和ax2是绘图轴实例,不是数据序列,排序它们毫无意义。
正确的做法是确保两个数据集共享同一组行业分类(即索引一致),这样柱状图和折线图会自动对齐X轴:
- 先把
three中的Sectors列设置为数据集的索引,让dataset和dataset2的行标签都是行业名称,绘图时就会自动按相同顺序匹配。
2. 替换X轴数字为行业名称
当数据集以Sectors为索引时,Matplotlib会自动把索引作为X轴标签,若自动生成的标签不符合预期,可手动指定X轴刻度标签。
修复后的完整代码
import matplotlib.pyplot as plt # 将Sectors列设为数据集索引,确保两个数据集分类对齐 three = three.set_index('Sectors') # 提取数据,此时两者索引均为行业名称 dataset = three[['Market_Cap_B','Ent_Value','Revenue','EBITDA']] dataset2 = three[['Empl_K','Vol_M']] # 绘制主轴柱状图 ax = dataset.plot(kind='bar', figsize=(12, 8)) # 绘制次轴折线图,指定共享主轴X轴,自动对齐分类 ax2 = dataset2.plot(kind='line', secondary_y=True, ax=ax, marker='o', figsize=(12, 8)) # 手动设置X轴刻度标签,避免重叠 ax.set_xticklabels(three.index, rotation=45, ha='right') # 设置标题与布局 ax.set_title("S&P 500 by Sectors - July 2023") plt.tight_layout() plt.show()
关键说明
- 索引对齐:通过
three.set_index('Sectors')让两个数据集的行标签统一为行业名称,绘图时Matplotlib会按相同顺序渲染X轴元素,彻底解决排序错位问题。 - X轴标签优化:
ax.set_xticklabels(three.index)强制替换X轴刻度为行业名称,rotation=45和ha='right'用于避免标签重叠,提升可读性。 - 次轴可视化优化:添加
marker='o'让折线图的数据点更清晰,方便与柱状图数据对比。
内容的提问来源于stack exchange,提问作者Nino.Ninov
相关产品推荐
相关产品推荐

