我想用ggplot2创建一个人口金字塔。这个问题是问before的,但我认为解决方法必须简单得多。
test <- (data.frame(v=rnorm(1000), g=c('M','F')))
require(ggplot2)
ggplot(data=test, aes(x=v)) +
geom_histogram() +
coord_flip() +
facet_grid(. ~ g)
生成此图像。在我看来,创建人口金字塔所缺少的唯一步骤是反转第一个面的x轴,使其从50变为0,同时保持第二个面不变。有人能帮忙吗?
一般金字塔密码
geom_*()
而不使用子设置数据,如果要在方面图中创建多个棱锥体,这尤其有用。geom_col()
而不是geom_bar()
,后者具有更好的默认值stat
limits = max(d$pop) * c(-1,1)
,以便在x轴上比较性别和相等标签。正在创建数据。。。
绘图代码。。。
注意,如果你的数据是在个人层面上的,而不是按年龄性别组总结的,那么答案here也很一般。
扩展@gjabel的职位,这里是一个更干净的人口金字塔,同样使用ggplot2。
这是一个没有刻面的解决方案。首先,创建数据帧。我使用了从1到20的值来确保所有值都不是负的(对于人口金字塔,您不会得到负的计数/年龄)。
然后分别为每个
g
值组合两个geom_bar()
调用。对于F
计数按原样计算,但是对于M
计数乘以-1得到相反方向的bar。然后使用scale_y_continuous()
获取轴的漂亮值。更新
由于参数
subset=.
在最新的ggplot2
版本中被弃用,因此可以用函数subset()
匹配相同的结果。相关问题 更多 >
编程相关推荐