使用ggplot2将数据分组到柱状图中的限制之外

时间:2017-06-19 19:50:00

标签: r ggplot2 zoom grouping histogram

我正在尝试对部分数据进行放大的直方图。我的问题是,我想将范围之外的所有内容放到最后一类“10+”中。可以使用ggplot2吗?

示例代码:

x <- data.frame(runif(10000, 0, 15))
ggplot(x, aes(runif.10000..0..15.)) + 
  geom_histogram(aes(y =  (..count..)/sum(..count..)), colour = "grey50", binwidth = 1) + 
  scale_y_continuous(labels = percent) +
  coord_cartesian(xlim=c(0, 10)) +
  scale_x_continuous(breaks = 0:10) 

以下是直方图的外观: How the histogram looks now

以下是我希望它的样子: How the histogram should look

可能通过嵌套ifelses来做到这一点,但正如我在我的问题中有更多的情况,ggplot有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用forcatsdplyr来有效地对值进行分类,汇总最后的&#34;级别&#34;然后计算绘图前的百分比。这样的事情应该有效:

library(forcats)
library(dplyr)
library(ggplot2)

x <- data.frame(x = runif(10000, 0, 15))
x2 <- x %>%
  mutate(x_grp = cut(x, breaks = c(seq(0,15,1)))) %>% 
  mutate(x_grp = fct_collapse(x_grp, other = levels(x_grp)[10:15])) %>% 
  group_by(x_grp) %>% 
  dplyr::summarize(count = n())

ggplot(x2, aes(x = x_grp, y = count/10000)) + 
  geom_bar(stat = "identity", colour = "grey50") + 
  scale_y_continuous(labels = percent) 

但是,结果图与您的示例有很大不同,但我认为这是正确的,因为我们正在构建统一分布:

enter image description here