Rob*_*bvh 5 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"]
Run Code Online (Sandbox Code Playgroud)
我使用以下代码来绘制条形图:
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()
Run Code Online (Sandbox Code Playgroud)
产生以下条形图:
我的问题:如何控制条之间的空白?我想要在男性(蓝色)和女性(橙色)条之间有一些额外的空白。
输出应该如下所示(在 中编辑得不好MS PPT
):
我已经找到了几个关于此的主题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()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13952 次 |
最近记录: |