我使用了 gjabel answer为我的数据创建人口金字塔。
我的数据与下面的示例类似,其中对于某些年龄,无论是女性还是男性都没有该年龄的代表。
#individual level data
Age<-c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,3,5,10,30,90)
Sex<- c("Male","Male","Male","Male","Male","Male","Male","Male","Male","Male","Male","Male","Male","Male","Male","Female", "Female","Female", "Female","Female")
test <- data.frame(Age, Sex)
最终结果应该显示一个连续的 y 轴,一个从 0 到 90 的序列,中间间隔 1。如果没有人符合该年龄,那么就不会有条形图,而是显示年龄类别的空格。
- 我该如何在人口金字塔中将这些年龄表示为零?
如何使公侧和母侧在 x 轴上对称?我希望在我的绘图中两侧具有相同的对称 x 限制。
require(ggplot2) require(plyr) ggplot(data=test,aes(x=as.factor(round(Age)),fill=Sex)) + geom_bar(data= subset(test,test$Sex=="Female")) + geom_bar(data= subset(test, test$Sex=="Male"), mapping=aes(y=..count..*(-1)), position="identity") + scale_y_continuous(breaks=seq(-50,50,10),labels=abs(seq(-50,50,10))) + xlab("Age (years)")+ ylab("Count") + scale_x_discrete(breaks = c(0,10,20,30,40,50,60,70,80,90))+ coord_flip()
最佳答案
要获取图中的所有年龄,(1) 将所有级别添加到您想要包含在图中的 Age
因子,并 (2) 添加 drop=FALSE
到 scale_x_discrete
。要获得对称的 y 轴,请将所需的 y 范围添加到 coord_flip()
。
下面的示例包含使用 cut
函数创建的按 10 年分组的年龄(年龄小于 1 的除外)。 scale_x_discrete
中的标签设置为与 cut
中的分组相对应。
ggplot(data=test,aes(x=cut(Age, breaks=c(-1,seq(0,100,10))), fill=Sex)) +
geom_bar(data=subset(test, Sex=="Female")) +
geom_bar(data=subset(test, Sex=="Male"), aes(y=..count..*(-1)),
position="identity") +
scale_y_continuous(breaks=seq(-50,50,10),labels=abs(seq(-50,50,10))) +
scale_x_discrete(labels=c("< 1",paste0(seq(1,91,10),"-",seq(10,100,10))), drop=FALSE) +
xlab("Age (years)") + ylab("Count") +
coord_flip(ylim=c(-20,20))
如果您想将每个年龄值显示为单独的条形图,而不是将它们按多年增量分组,您可以执行以下操作:
ggplot(data=test,aes(x=factor(round(Age), levels=seq(0,100,1)), fill=Sex)) +
geom_bar(data=subset(test, Sex=="Female")) +
geom_bar(data=subset(test, Sex=="Male"), aes(y=..count..*(-1)),
position="identity") +
scale_y_continuous(breaks=seq(-50,50,10),labels=abs(seq(-50,50,10))) +
scale_x_discrete(breaks = seq(0,90,10), drop=FALSE) +
xlab("Age (years)") + ylab("Count") +
coord_flip(ylim=c(-20,20))
关于r - 如何使用显示所有年龄级别的个人数据制作人口金字塔,即使 R 中没有该级别的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37126453/