【问题标题】:How to control white space between bars in seaborn bar plots?如何控制seaborn条形图中条形之间的空白?
【发布时间】:2020-11-14 04:47:37
【问题描述】:

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

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()

产生以下条形图:

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

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

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

谢谢。

【问题讨论】:

    标签: python bar-chart seaborn


    【解决方案1】:

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

    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()
    

    【讨论】:

    • 嗨,JohanC,我工作很忙,所以还不能回复。虽然我想可能有一种更 Pythonic 的方式来做到这一点,但您的解决方案有效。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-05-06
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多