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

fdbelqdn  于 2023-03-19  发布在  其他
关注(0)|答案(2)|浏览(117)

这可能是一个简单的任务,但我是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)

0x6upsns

0x6upsns1#

1.使用panda.DataFrame.melt将 Dataframe 转换为长格式,然后执行以下操作之一:
1.使用pandas.DataFrame.pivot_tablesize进行整形和聚合,然后使用pandas.DataFrame.plot绘图
1.直接使用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))
ax = sns.countplot(data=df.melt(), y='value', hue='variable')
sns.move_legend(ax, bbox_to_anchor=(1, 1.02), loc='upper left')
plt.show()

dluptydi

dluptydi2#

试试这个:

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

相关问题