python - 如何控制 seaborn 条形图中条形之间的空白?

标签 python bar-chart seaborn

我有以下简单的示例数据框:

import pandas as pd
data = [['Alex',25],['Bob',34],['Sofia',26],["Claire",35]]
df = pd.DataFrame(data,columns=['Name','Age'])
df["sex"]=["male","male","female","female"]

我使用以下代码绘制条形图:

import matplotlib.pyplot as plt

import seaborn as sns

age_plot=sns.barplot(data=df,x="Name",y="Age", hue="sex",dodge=False)
age_plot.get_legend().remove()
plt.setp(age_plot.get_xticklabels(), rotation=90)
plt.ylim(0,40)
age_plot.tick_params(labelsize=14)
age_plot.set_ylabel("Age",fontsize=15)
age_plot.set_xlabel("",fontsize=1)
plt.tight_layout()

生成以下条形图:

enter image description here

我的问题:如何控制条之间的空白?我想要在男性(蓝色)和女性(橙色)条之间有一些额外的空白。

输出应如下所示(在 MS PPT 中编辑不当):

enter image description here

我为 matplotplib 找到了几个关于此的主题(例如 https://python-graph-gallery.com/5-control-width-and-space-in-barplots/)但没有对于 seaborn。我更喜欢使用 seaborn,因为通过 hue 着色的功能很简单。

谢谢。

最佳答案

一种可能是在中间插入一个空条:

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

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

age_plot = sns.barplot(data=df, x="Name", y="Age", hue="Gender", dodge=False)
age_plot.get_legend().remove()
plt.setp(age_plot.get_xticklabels(), rotation=90)
plt.ylim(0, 40)
age_plot.tick_params(labelsize=14)
age_plot.tick_params(length=0, axis='x')
age_plot.set_ylabel("Age", fontsize=15)
age_plot.set_xlabel("", fontsize=1)
plt.tight_layout()
plt.show()

example plot

关于python - 如何控制 seaborn 条形图中条形之间的空白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63071539/

相关文章:

python - 在 python 3.6 中安装 GDAL

python - Django:扩展用户模型与创建用户配置文件模型

python - 使用 BeautifulSoup 时出现 AttributeError

javascript - 在条形图中的条形顶部显示值

r - 在 ggplot() 中将误差线放置在列中心时出现问题

python - Reds_r 未被识别为有效的 RGBA 参数

python - Seaborn - 根据 x 名称而不是色调更改条形颜色?

python - Python 中的双线性插值

python - 如何为每个组创建堆积条

python - 如何从时间戳创建每小时/天的seaborn热图,每小时有多个数据点