拥有泰坦尼克号数据集我会根据乘客类别绘制年龄/性别的直方图。
str(titanic)
提供以下数据
> 'data.frame': 714 obs. of 4 variables:
$ Survived: int 0 1 1 1 0 0 0 1 1 1 ...
$ Pclass : int 3 1 3 1 3 1 3 3 2 3 ...
$ Sex : chr "male" "female" "female" "female" ...
$ Age : num 22 38 26 35 35 54 2 27 14 4 ...
首先,我制作了一个男性/女性与旅行班比例的情节。
已由
完成ggplot(data = titanic, aes(x = factor(Age), fill = factor(Sex))) +
geom_bar(position = "dodge", aes(y = (..count..)/sum(..count..))) +
facet_grid(. ~ Pclass) + scale_x_discrete(breaks=c(20,40,60)) +
ylab("Frequency") + xlab("Age") +
scale_fill_discrete(name = "Sex")
现在我想使用相同的图表,但添加其他信息 - >所有类别的幸存者比例。 例如,20-30岁的女性在第一级旅行的比例是多少。
我希望在相同的条形图中看到它,即将每列分成两部分(幸存/未幸存)。
我可以用ggplot吗?如果是的话,怎么样?
答案 0 :(得分:1)
使用内置的泰坦尼克号数据集,我可以大致向您展示@Axeman在评论中建议的内容。请注意,它只有两个年龄类别(儿童/成人),因此您需要决定如何对数据进行分区。
ggplot(as.data.frame(Titanic)
, aes(y = Freq
, x = Age
, fill = Survived)) +
geom_col() +
facet_grid(Sex ~ Class)
重要的是,我不确定你是通过以现在的方式显示频率来获得任何东西,因为它们似乎没有显示出与计数有意义的任何有意义的不同。相反,如果你想显示每个幸存下来的组中的比例,你可能最好先计算这些百分比,然后将它们传递给ggplot
。以下是使用dplyr
的示例。同样,你的年龄箱可以是你想要的任何东西,但请注意,箱子越窄,数据就越嘈杂。
as.data.frame(Titanic) %>%
group_by(Class, Sex, Age) %>%
mutate(Proportion = Freq/ sum(Freq)) %>%
ggplot(aes(y = Proportion
, x = Age
, fill = Survived)) +
geom_col() +
facet_grid(Sex ~ Class)