【发布时间】:2019-01-03 01:56:11
【问题描述】:
我想在 python 中制作一个条形图,其中包含来自“是”或“否”的数据计数的多个 x 类别。我已经开始编写一些代码,但我相信我正在以缓慢的方式获得我想要的解决方案。我可以使用 seaborn、Matplotlib 或 pandas 但不散景的解决方案,因为我想制作可按比例缩放的出版质量数字。
最终我想要的是:
- x 轴上包含“canoe”、“cruise”、“kayak”和“ship”类别的条形图
- 按“颜色”分组,即绿色或红色
- 显示“是”响应的比例:即“是”行数除以“红色”和“绿色”的计数,在本例中为 4 个红色和 4 个绿色,但这可能会发生变化。
这是我正在使用的数据集:
import pandas as pd
data = [{'ship': 'Yes','canoe': 'Yes', 'cruise': 'Yes', 'kayak': 'No','color': 'Red'},{'ship': 'Yes', 'cruise': 'Yes', 'kayak': 'Yes','canoe': 'No','color': 'Green'},{'ship': 'Yes', 'cruise': 'Yes', 'kayak': 'No','canoe': 'No','color': 'Green'},{'ship': 'Yes', 'cruise': 'Yes', 'kayak': 'No','canoe': 'No','color': 'Red'},{'ship': 'Yes', 'cruise': 'Yes', 'kayak': 'Yes','canoe': 'No','color': 'Red'},{'ship': 'No', 'cruise': 'Yes', 'kayak': 'No','canoe': 'Yes','color': 'Green'},{'ship': 'No', 'cruise': 'No', 'kayak': 'No','canoe': 'No','color': 'Green'},{'ship': 'No', 'cruise': 'No', 'kayak': 'No','canoe': 'No','color': 'Red'}]
df = pd.DataFrame(data)
这是我开始的:
print(df['color'].value_counts())
red = 4 # there must be a better way to code this rather than manually. Perhaps using len()?
green = 4
# get count per type
ca = df['canoe'].value_counts()
cr = df['cruise'].value_counts()
ka = df['kayak'].value_counts()
sh = df['ship'].value_counts()
print(ca, cr, ka, sh)
# group by color
cac = df.groupby(['canoe','color'])
crc = df.groupby(['cruise','color'])
kac = df.groupby(['kayak','color'])
shc = df.groupby(['ship','color'])
# make plots
cac2 = cac['color'].value_counts().unstack()
cac2.plot(kind='bar', title = 'Canoe by color')
但我真正想要的是所有 x 类别都在一个图上,只显示“是”响应的结果,并作为“是”的比例而不仅仅是计数。帮忙?
【问题讨论】:
-
你能附上一张你期望图表应该是什么样子的图片吗?
-
是的@Scott Boston。我需要看起来像这样的东西stackoverflow.com/questions/31845258/… with seaborn
标签: python pandas dataframe plot group-by