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

Matplotlib 2.2.2:离散分类Y轴的刻度、范围设置及顺序自定义

解决Matplotlib 2.2.2中Y轴自定义分类范围与顺序的问题

没问题,针对你在Matplotlib 2.2.2里遇到的这两个需求——让Y轴包含数据中未出现的分类,同时自定义分类的显示顺序——我们可以通过手动指定Y轴的刻度规则来解决。默认情况下Matplotlib会按数据里类别出现的先后顺序生成Y轴,所以咱们直接干预这个逻辑就好,下面是具体的实现方案和代码示例:

核心思路

  1. 先定义完整的Y轴分类列表(包含你需要的所有分类,哪怕数据里没出现),并按你想要的顺序排列
  2. 手动设置Y轴的刻度位置和对应的分类标签,覆盖Matplotlib的默认生成逻辑
  3. 如果是绘制条形图这类需要定位元素的图表,要把原始的类别数据转换成自定义列表中的索引,确保元素出现在正确的Y轴位置上

示例1:散点图场景

假设你的数据是散点形式,直接绘制后再修改Y轴即可:

import matplotlib.pyplot as plt

# 你的原始数据
x_values = [1.2, 3.5, 5.1, 7.8]
y_categories = ["B", "A", "C", "A"]  # 数据里没有"D"这个分类

# 自定义Y轴的分类顺序,包含未出现的"D"
desired_y_order = ["A", "B", "C", "D"]

# 绘制散点图
plt.scatter(x_values, y_categories)

# 设置Y轴刻度:位置是0到3(对应4个分类),标签用我们自定义的顺序
plt.yticks(ticks=range(len(desired_y_order)), labels=desired_y_order)

# 补充图表信息
plt.title("Scatter Plot with Custom Y-axis")
plt.xlabel("X Data")
plt.ylabel("Categories")

plt.show()

运行这段代码后,Y轴会按A→B→C→D的顺序显示,哪怕数据里没有D,它也会出现在Y轴上。

示例2:水平条形图场景

如果是绘制水平条形图,需要先把原始类别转换成自定义列表的索引,确保条形对应到正确的位置:

import matplotlib.pyplot as plt

# 原始数据:分类和对应数值
category_counts = {"B": 4, "A": 6, "C": 3}
y_categories = list(category_counts.keys())
x_values = list(category_counts.values())

# 自定义Y轴分类顺序,包含未出现的"D"
desired_y_order = ["C", "A", "B", "D"]

# 将原始类别转换为自定义列表中的索引
y_indices = [desired_y_order.index(cat) for cat in y_categories]

# 绘制水平条形图
plt.barh(y_indices, x_values)

# 设置Y轴刻度
plt.yticks(ticks=range(len(desired_y_order)), labels=desired_y_order)

# 补充图表信息
plt.title("Horizontal Bar Chart with Custom Y-axis")
plt.xlabel("Count")
plt.ylabel("Categories")

plt.show()

这里的y_indices会把每个原始类别映射到自定义顺序的位置上,比如A会对应索引1,这样条形就会出现在Y轴A标签的位置。

关键说明

  • 这种方法完全兼容Matplotlib 2.2.2版本,因为yticks是Matplotlib一直以来的核心API,没有版本兼容性问题
  • 如果需要垂直条形图,逻辑类似,只需要把barh换成bar,并调整yticks为xticks即可(如果是X轴分类的话)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:14:27