如何在facet_wrap中按年龄分组自定义排序绘图顺序
问题解决:自定义facet_wrap的年龄组顺序
嘿,我一眼就揪出问题根源啦!你在把Age列转成因子的时候,定义的水平和原始数据里的字符串完全不匹配——你写的是< 30、30-50、> 50,但原始数据里的Age值都是带years后缀的(比如30-50 years、> 50 years),R找不到对应的匹配项,自然就把所有年龄值都转成NA了。
接下来给你一步一步的修正方案:
1. 修正因子水平定义
首先要让因子的levels参数和原始数据里的Age字符串完全一致,同时按你想要的升序顺序排列:
# 匹配原始数据的完整字符串,同时指定顺序 zbias$Age <- factor(zbias$Age, levels = c("< 30 years", "30-50 years", "> 50 years"), ordered = TRUE)
你可以先运行table(zbias$Age)确认一下,现在不会有NA值了,每个年龄组的计数都能正常显示。
2. 重新绘制图表
现在再运行你的ggplot代码,facet_wrap就会严格按照你设定的<30→30-50→>50顺序排列子图了:
ggplot(zbias)+ geom_density(aes(stdbias))+ facet_wrap(~Age, scales = "free_x")+ labs(x="Standard Bias", y="Density")
额外提示
如果你的数据里目前没有< 30 years这个组也没关系,因子定义里包含它不会报错,等后续有这个组的数据时,图表会自动按顺序加入对应的子图。
内容的提问来源于stack exchange,提问作者Dampf
相关产品推荐
相关产品推荐

