如何创建分类计数的分组条形图
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')
- 使用
panda.DataFrame.melt
将数据帧转换为长格式,然后执行以下操作之一:
- 使用
pandas.DataFrame.pivot_table
to reshape and aggregate size
, and then plot with pandas.DataFrame.plot
- 直接用
seaborn.countplot
绘图
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()
这可能是一项简单的任务,但我是 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')
- 使用
panda.DataFrame.melt
将数据帧转换为长格式,然后执行以下操作之一:- 使用
pandas.DataFrame.pivot_table
to reshape and aggregatesize
, and then plot withpandas.DataFrame.plot
- 直接用
seaborn.countplot
绘图
- 使用
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()