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

