使用python/pandas/seaborn将分类数据绘制成相对频率的单条形图
我有一大堆调查中的分类数据,我想用与图中所示相同的方式来绘制。实际上,它是一个条形饼图 数据在熊猫数据框中,下面是一个我尝试做的玩具示例:使用python/pandas/seaborn将分类数据绘制成相对频率的单条形图,python,pandas,bar-chart,seaborn,Python,Pandas,Bar Chart,Seaborn,我有一大堆调查中的分类数据,我想用与图中所示相同的方式来绘制。实际上,它是一个条形饼图 数据在熊猫数据框中,下面是一个我尝试做的玩具示例: import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # create toy dataframe df = pd.DataFrame({'Names': ['Steve','Steve','Steve','Jon','Michael','Michael','E
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# create toy dataframe
df = pd.DataFrame({'Names': ['Steve','Steve','Steve','Jon','Michael','Michael','Eric'] })
# get pd.Series of counts of each name
data_counts = df['Names'].value_counts()
# return the name of each category, and its counts separately
category_names = data_counts.index
category_counts = data_counts.get_values()
# attempt to plot
f, ax = plt.subplots(figsize=(10, 10))
colors = ['red', 'green', 'blue', 'yellow']
i=0
for name, data in zip(category_names, category_counts):
sns.barplot(x=data, label=name, color=colors[i])
i+=1
handles, labels = ax.get_legend_handles_labels()
ax.legend(loc='upper right', prop={'size':12})
这会产生一种堆叠的直方图,但每个类别并不是按比例表示的。每个条形图都是过度绘制的,而不是作为分数共享绘制的
这是正确的吗?首先,您没有正确使用子批次,请参见此处: 其次,可以使用pandas的基本绘图功能绘制堆叠条形图:
pd.DataFrame(data_counts).transpose().plot(kind='barh', stacked=True)
请注意,对于要堆叠的条形图,必须转置数据,并且为了转置熊猫系列,需要首先将其转换为数据帧
最后,如果您确实想使用Seaborn,此链接可能会有所帮助:不是最优雅的,但它可以:
x = df.Names.value_counts()
y = x.reset_index()
y["name_of_column"] = ""
y.pivot(index="name_of_column", columns="index", values=0).plot(kind="bar", stacked=True)
你知道你会的,对吧?这将帮助将来有类似问题的其他人。感谢您的帮助!我不知道“接受回答”有时间限制。谢谢你的提醒,你实际上对答案投了赞成票,但没有接受:)你可以对任何好的答案投赞成票,但你只能接受一个答案。你应该接受最适合你的答案(可能是主观的)。很高兴我能帮忙!