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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:15:00