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

如何调整Seaborn分组条形图中分组内条形的间距?

解决Seaborn条形图中分组条形的间距问题

要给同一Name下不同Gender的条形添加间距,不需要添加空类别,直接调整条形的位置和宽度就能实现。以下是修改后的代码:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

df = pd.DataFrame({'Name': ['Alex', 'Alex', 'Sofia', 'Sofia'], 'Age': [15, 18, 16, 22], 'Gender': ['M', 'F', 'M', 'F']})

# 绘制条形图时设置初始宽度,避免调整后过于拥挤
age_plot = sns.barplot(data=df, x="Age", y="Name", hue="Gender", width=0.4)

# 获取所有条形的图形对象
patches = age_plot.patches
# 计算每组类别(Name)和分组(Gender)的数量
n_categories = len(df['Name'].unique())
n_hues = len(df['Gender'].unique())

# 逐个调整每个类别下的分组条形位置
for i in range(n_categories):
    # 取出当前类别下的两个分组条形
    male_bar = patches[i * n_hues]
    female_bar = patches[i * n_hues + 1]
    
    # 获取当前条形的y轴基础位置
    base_y = male_bar.get_y()
    # 设置偏移量,控制间距大小
    offset = 0.1
    
    # 分别上下偏移两个条形,留出间距
    male_bar.set_y(base_y - offset)
    female_bar.set_y(base_y + offset)
    
    # 适当缩小条形宽度,避免偏移后超出类别范围
    male_bar.set_width(male_bar.get_width() * 0.9)
    female_bar.set_width(female_bar.get_width() * 0.9)

plt.show()

说明

  • 先通过width=0.4设置初始条形宽度,为后续偏移预留空间;
  • 遍历每个类别下的分组条形,通过set_y()调整它们的纵向位置(因为是横向条形,y轴对应类别),实现间距;
  • 用set_width()稍微缩小条形宽度,避免偏移后条形超出对应类别的范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:50:28