gpt4 book ai didi

python - 使用 python/pandas/seaborn 将分类数据绘制成相对频率的单个条形图

转载 作者:行者123 更新时间:2023-11-30 22:59:50 27 4
gpt4 key购买 nike

我有一堆来自调查的分类数据,我想以与 here 所示相同的方式绘制它。 。实际上,它是一个条形饼图。

数据位于 pandas 数据框中,这是我尝试做的一个玩具示例:

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})

这会产生一种堆叠直方图,但每个类别并不是按比例表示的。每个条形图都被过度绘制,而不是绘制为分数份额。

这是正确的吗?

最佳答案

首先,您没有正确使用子图,请参见此处:http://matplotlib.org/examples/pylab_examples/subplots_demo.html

其次,可以使用 pandas 的基本绘图功能来绘制堆积条形图:

pd.DataFrame(data_counts).transpose().plot(kind='barh', stacked=True)

请注意,要堆叠条形图,您必须转置数据,并且为了转置 pandas 系列,您需要首先将其转换为数据帧。

stacked_bars

最后,如果您绝对想使用 Seaborn,此链接可能会有所帮助:http://randyzwitch.com/creating-stacked-bar-chart-seaborn/

关于python - 使用 python/pandas/seaborn 将分类数据绘制成相对频率的单个条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35591418/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com