拆分数据以在R中并排绘制直方图

时间:2018-02-14 03:29:28

标签: r ggplot2 histogram

我正在学习R与澳大利亚运动员的数据集。

通过使用ggplot,我可以绘制这样的直方图。

library(DAAG)

ggplot(ais, aes(wt, fill = sex)) + 
  geom_histogram(binwidth = 5)

enter image description here

通过使用摘要(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个相似的直方图,并排)?

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)

enter image description here

创建的变量是一个因子,如果您指定级别的顺序,您可以以不同的方式对这些级别进行排序(这里有很多问题表明如果您搜索它们 - 与ggplot条形图的重新排序条相同)。您也可以让比例变化 - 请查看?facet_wrap了解更多详情。

通常,您不应创建更多数据框。创建ais1ais2通常是可以避免的,如果您对单个数据集使用单个数据框,您的生活将更加简单。添加新列进行分组可以很容易地保持组织有序。

答案 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

enter image description here