1

我对 Airbnb 数据集进行子集化和融合,并尝试绘制一个分组图表:

from plotnine import *

airbnb_melted = pd.melt(airbnb_newcomers, id_vars =['host_id'], value_vars =['host_identity_verified', 'host_is_superhost']) 
print(airbnb_melted)

融化的数据集如下所示:

在此处输入图像描述

我知道我的以下代码是错误的,并且绘图的输出不是我想要的,但它最接近我的想法:

ggplot(airbnb_melted, aes(x='variable', y='value')) +\
        geom_bar(stat = 'sum', position=position_dodge())

我在网上搜索并发现了很多带有y数字变量的绘图示例stat='count',可以使用。但是,y这里是分类的,它显示错误PlotnineError: 'stat_count() must not be used with a y aesthetic'

如何绘制类似于以下格式的分组条形图?橙色的词是我添加的指示。谢谢你。

在此处输入图像描述

2020 年 1 月 20 日更新:感谢@StupidWolf 的帮助,编码工作如下:

airbnb_host_count = airbnb_melted.replace(np.NaN, 'NA').groupby(['value', 'variable']).count().reset_index()

在此处输入图像描述

'host_id' 实际上在这里表示计数:

ggplot(airbnb_host_count, aes(x='variable', y='host_id', fill='value')) +\ 
    geom_bar(stat='sum', position=position.dodge())

在此处输入图像描述

4

1 回答 1

2
Try this:

from plotnine import *
import pandas as pd
import numpy as np
import random

random.seed(99)
airbnb_melted = pd.DataFrame(
    {'host_id':np.arange(20),
     'variable': np.repeat(['host_identity_verified','host_is_superhost'],[10,10]) ,
     'value' : random.choices(['t','f','NA'],k=20)
    })

我没有你的数据框,所以检查 NA 值到底是什么,然后像这样替换它,例如如果它是 NaN

airbnb_melted = airbnb_melted.replace(np.NaN,'NA')

我们可以检查计数:

airbnb_melted.groupby(['value','variable']).count()

value   variable    
NA  host_identity_verified  3
host_is_superhost   2
f   host_identity_verified  3
host_is_superhost   6
t   host_identity_verified  4
host_is_superhost   2

现在我们进行绘图,您设置 fill = 'value' 并且不设置 'stat',因为默认值是 'count',它与您的 t、f 和 NA 相符:

ggplot(airbnb_melted, aes(x='variable', fill='value')) +\
        geom_bar(position=position_dodge())

在此处输入图像描述

于 2020-01-17T19:02:46.687 回答