我正在学习R与澳大利亚运动员的数据集。
通过使用ggplot,我可以绘制这样的直方图。
library(DAAG)
ggplot(ais, aes(wt, fill = sex)) +
geom_histogram(binwidth = 5)
通过使用摘要(ais $ wt),第三个四分位数是84.12。现在我想用wt 84.12分割数据。并相应地绘制2个相似的直方图(并排)
分裂是:
ais1 = ais$wt[which(ais$wt>=0 & ais$wt<=84.12)]
ais2 = ais$wt[which(ais$wt>84.12)]
但我不知道如何让他们适应绘图。我试过了,但它没有工作:
ggplot(ais1, aes(wt, fill = sex)) +...
如何绘制直方图(相应的2个相似的直方图,并排)?
答案 0 :(得分:4)
将拆分作为列添加到数据
ais$wt_3q = ifelse(ais$wt < 84.12, "Quartiles 1-3", "Quartile 4")
然后使用facets:
ggplot(ais, aes(wt, fill = sex)) +
geom_histogram(binwidth = 5) +
facet_wrap(~ wt_3q)
创建的变量是一个因子,如果您指定级别的顺序,您可以以不同的方式对这些级别进行排序(这里有很多问题表明如果您搜索它们 - 与ggplot条形图的重新排序条相同)。您也可以让比例变化 - 请查看?facet_wrap
了解更多详情。
通常,您不应创建更多数据框。创建ais1
和ais2
通常是可以避免的,如果您对单个数据集使用单个数据框,您的生活将更加简单。添加新列进行分组可以很容易地保持组织有序。
答案 1 :(得分:1)
我们可以使用ggarrange
来安排每个子集的绘图对象
library(DAAG)
library(ggplot2)
library(ggpubr)
p2 <- ais %>%
filter(wt>=0, wt<=84.12) %>%
ggplot(., aes(wt, fill = sex)) +
geom_histogram(binwidth = 5) +
coord_cartesian(ylim = c(0, 30))
p1 <- ais %>%
filter(wt>84.12) %>%
ggplot(., aes(wt, fill = sex)) +
geom_histogram(binwidth = 5) +
coord_cartesian(ylim = c(0, 30))
ggarrange(p1, p2, ncol =2, nrow = 1, labels = c("p1", "p2"))
-output