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

如何在Matplotlib的Y轴刻度标签之间插入自定义符号

在Y轴刻度标签之间添加自定义符号(Matplotlib实现)

当然可以用Matplotlib实现这个需求!核心思路是找到每对Y轴刻度之间的中间位置,然后在这些位置上添加文本(比如+符号)。下面是修改后的可复现代码:

import matplotlib.pyplot as plt

labels = [
    "eight",
    "eight u two",
    "eight u one",
    "eleven u two",
    "eleven u one",
    "eleven"
]
fig, ax = plt.subplots(figsize=(4, 6))
ax.plot([1, 2, 3, 4, 5, 6], range(len(labels)))
ax.set_yticks(range(len(labels)))
ax.set_yticklabels(labels)

# 在每对Y轴标签之间添加+符号
for i in range(len(labels)-1):
    # 计算两个刻度之间的中间Y坐标
    mid_y = i + 0.5
    # 在中间位置添加文本,x坐标设为轴的左侧(可按需调整)
    ax.text(ax.get_xlim()[0], mid_y, "+", va='center', ha='right', fontsize=12)

plt.tight_layout()
plt.show()

代码细节说明

  • 遍历所有相邻刻度对,计算它们的中间Y坐标(比如第一个刻度在0,第二个在1,中间位置就是0.5)
  • 用ax.text()添加符号时:
    • va='center'和ha='right'确保符号垂直居中、水平对齐到Y轴刻度的右侧,想调整位置的话可以修改ha参数或x坐标值
    • 还能通过fontsize、color、weight等参数自定义符号的样式

更灵活的替代方案

如果觉得Matplotlib手动添加的方式不够直观,你可以试试Plotly这个交互式绘图库,它能通过自定义注释更灵活地实现这类需求,还支持交互操作。举个简单示例:

import plotly.graph_objects as go

labels = [
    "eight",
    "eight u two",
    "eight u one",
    "eleven u two",
    "eleven u one",
    "eleven"
]
x = [1, 2, 3, 4, 5, 6]
y = list(range(len(labels)))

fig = go.Figure(data=go.Scatter(x=x, y=y, mode='markers+lines'))

# 设置Y轴刻度
fig.update_yaxes(tickvals=y, ticktext=labels)

# 添加中间符号
for i in range(len(labels)-1):
    mid_y = i + 0.5
    fig.add_annotation(
        x=x[0]-0.5,  # 自定义x轴位置
        y=mid_y,
        text="+",
        showarrow=False,
        font=dict(size=12, color='black')
    )

fig.update_layout(height=600, width=400)
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 09:32:34