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

