在R中将数据分割以便侧边绘制直方图

3

我正在学习使用澳大利亚运动员数据集的R语言。

通过使用ggplot,我可以绘制以下直方图。

library(DAAG)

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

在此输入图片描述

使用summary(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个回答

5
将分割线作为一列添加到您的数据中。
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
我们可以使用 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"))

-输出

enter image description here


2
非常感谢您的帮助。不幸的是,我只能选择一个答案。您介意我这次选择Gregor的答案吗?因为它有赞成票。谢谢。 - Mark K
1
@MarkK 没问题。他的代码似乎比我的更简洁。我也会选择他的答案。 - akrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接