我正在尝试对部分数据进行放大的直方图。我的问题是,我想将范围之外的所有内容放到最后一类“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有没有办法做到这一点?
答案 0 :(得分:1)
您可以使用forcats
和dplyr
来有效地对值进行分类,汇总最后的&#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)
但是,结果图与您的示例有很大不同,但我认为这是正确的,因为我们正在构建统一分布: