如何创建分类计数的分组条形图

How to create a grouped bar plot of categorical counts

这可能是一项简单的任务,但我是 Python 中绘图的新手,我很难将逻辑转换为代码。我正在使用下面的代码,但我想分开橙色和蓝色线(不叠加)。我需要创建一个水平条形图,将 2 个条分开?

df = pd.DataFrame({'a':[1,2,3,1,2,2,2],
             'b':[1,1,1,3,2,2,2]})
ax = df['a'].value_counts().plot(kind='barh', color='skyblue', width=.75, legend=True, alpha=0.8)
df['b'].value_counts().plot(kind='barh', color='orange', width=.5, alpha=1, legend=True)

试试这个:

df['a'].value_counts().to_frame('a').join(df['b'].value_counts().to_frame('b')).plot(kind='barh')

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

df = pd.DataFrame({'a':[1,2,3,1,2,2,2], 'b':[1,1,1,3,2,2,2]})

# convert to long form
df = df.melt()

# pivot_table and aggregate
df = df.pivot_table(index='value', columns='variable', values='value', aggfunc='size')

# plot
df.plot(kind='barh', figsize=(4, 3))
ax.legend(bbox_to_anchor=(1, 1.02), loc='upper left')
plt.show()

seaborn.countplot

df = pd.DataFrame({'a':[1,2,3,1,2,2,2], 'b':[1,1,1,3,2,2,2]})

plt.figure(figsize=(4, 3))
p = sns.countplot(data=df.melt(), y='value', hue='variable')
p.legend(bbox_to_anchor=(1, 1.02), loc='upper left')
plt.show()