ggplot2 / plotnine:如何为融化的 df 绘制分组图表?
ggplot2 / plotnine: How to plot grouped chart for a melted df?
我对 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())
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())
我对 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())
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())