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

如何在matplotlib.pyplot的分类轴上绘制水平横线(hlines)?

实现方案

核心原理:matplotlib的字符串分类x轴底层默认会将每个分类映射为从0开始的连续整数坐标(第一个分类对应0、第二个对应1,以此类推),相邻分类的默认间距为1。要绘制以分类为中心、向两侧各延伸50%分类间距的横线,只需要将每个分类的横线起止坐标设为对应整数 ± 0.5即可。

具体实现代码

基础实现

import pandas as pd
import matplotlib.pyplot as plt

# 准备测试数据
s2 = pd.Series([2, 2.5, -1, 3], pd.Index(list('abcd'), name='x-value')) 

fig, ax = plt.subplots()
# 可先绘制你需要的基础图表,比如柱状图
ax.bar(s2.index, s2.values, width=0.9)

# 生成每个分类对应的整数坐标
x_pos = range(len(s2))
# 绘制水平横线
ax.hlines(
    y=s2.values,
    xmin=[x - 0.5 for x in x_pos],
    xmax=[x + 0.5 for x in x_pos],
    color='red',
    linewidth=2
)

plt.show()

通用场景实现

如果你已经手动调整过x轴分类的顺序,或者不确定分类的映射关系,可以直接从轴对象获取当前的分类坐标:

# 从已配置的轴对象直接获取分类对应的数值坐标
x_pos = ax.get_xticks()
ax.hlines(
    y=s2.values,
    xmin=x_pos - 0.5,
    xmax=x_pos + 0.5,
    color='red',
    linewidth=2
)

如果你需要调整横线的宽度,只需要修改±后的系数即可:比如需要横线占分类间距的80%,就改成±0.4即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:09:01