如何在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
相关产品推荐
相关产品推荐

