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

如何在seaborn中实现共享y轴的标签居中对齐

Seaborn共享y轴水平条形图标签居中实现方案

核心实现思路

  • 现有代码重复给两个子图设置y轴刻度标签属于冗余操作,由于两个子图开启了sharey=True,仅需要在显示刻度的轴上配置一次标签即可
  • 左图设置yaxis.tick_right()后,y轴刻度正好落在两个子图的拼接分界线上,默认标签为左对齐,会整体偏移到右图区域内,只需要修改标签对齐方式和位置参数即可实现居中
  • 不需要额外新增中间轴或者复杂的坐标转换,直接通过matplotlib原生的标签属性配置就能实现效果,性能开销最低

优化后完整代码

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import string
import random

# 生成测试数据 可替换为实际业务数据
random.seed(42)
labels = []
for i in range(10):
    labels.append(''.join(random.choices(string.ascii_lowercase, k=4)))
    labels.append(''.join(random.choices(string.ascii_lowercase, k=7)))     
score = np.abs(np.random.randn(20))

fig, axes = plt.subplots(1, 2, figsize=(5, 5), sharey=True)

for idx, ax in enumerate(axes):   
    # 直接传入range对象生成y轴位置,省略冗余列表推导
    sns.barplot(y=range(len(score)), x=score, ax=ax, orient='h')    
    if idx == 0:
        ax.invert_xaxis()
        ax.yaxis.tick_right()
        # 核心配置:设置标签水平居中,位置锚定在两图分界的轴脊处
        ax.set_yticklabels(labels, ha='center', x=0)
            
fig.tight_layout(w_pad=0, pad=1)
plt.show()

关键参数说明

  • ha='center':将y轴刻度标签的水平对齐方式从默认的左对齐修改为居中对齐
  • x=0:指定标签在y轴局部坐标系中的水平位置为轴脊所在位置(即两个子图的拼接分界线),配合居中对齐让标签中心正好落在两图中间,不会偏向任意一侧
  • 代码中添加了随机种子保证测试结果可复现,简化了冗余的列表推导写法,运行效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:06:32