gpt4 book ai didi

r - 在 ggplot2 中,如何将堆叠直方图中的小值条形组合在一起?

转载 作者:行者123 更新时间:2023-12-01 22:07:33 26 4
gpt4 key购买 nike

示例数据:

tmp_df <-  
data.frame(a = rnorm(100, 0, 1),
b = rnorm(100, 0.5, 1),
c = rnorm(100, -0.5, 1),
d = rnorm(100, 1, 1),
e = rnorm(100, -1, 1)) %>%
tidyr::gather()

并生成堆叠直方图:

tmp_df %>%
ggplot(aes(x = value, fill = key)) +
geom_histogram(binwidth = 0.1, position = 'stack')

enter image description here

一切都很好,在每个垃圾箱中,我们有 5 个不同颜色的条形,显示每个组的每个垃圾箱中的计数。

如果我只想显示每个箱的前 N(假设 N = 2)组的计数,并将其他计数分类和聚合到“其他”组中,该怎么办?

例如,对于 N = 2 并且 bin 以零为中心,我想将落入此 bin 的 ac 的计数显示为单独的条形,而是将 bde 的条形长度合并为一。对于以大约 -1.4 为中心的 bin,我想显示组 ec 的计数,但汇总其他两个。

最佳答案

您可以通过创建一个新的分组变量(我们将其称为 group )来实现此目的,对于每个 bin,该变量采用 key 的值。对于 key 的前两级或other其他三个级别的key 。为了实现这一点,您需要在绘制数据之前对数据进行分类和统计,然后创建新的 group列并将其用作 fill美学ggplot .

library(dplyr)
library(ggplot2)

# Set a seed for reproducibility
set.seed(59)
tmp_df <-
data.frame(a = rnorm(100, 0, 1),
b = rnorm(100, 0.5, 1),
c = rnorm(100, -0.5, 1),
d = rnorm(100, 1, 1),
e = rnorm(100, -1, 1)) %>%
tidyr::gather()

在下面的代码中,我们对数据进行分箱并创建新的分组变量。我使用了 0.2 个单位宽的垃圾箱,标签等于垃圾箱的中点。创建group列,我们使用 rank找到 key 的两个最常见的值在每个垃圾箱中,并将其余的设置为“其他”。

tmp_df = tmp_df %>% 
group_by(key,
bins=cut(value, seq(-10,10,0.2), labels=seq(-9.9,9.9,0.2))) %>%
tally %>%
group_by(bins) %>%
mutate(group = ifelse(key %in% key[rank(-n, ties="first") %in% 1:2], key, "other")) %>%
arrange(bins, key)

现在,对于绘图,我们使用 geom_bar我们填写新的 group我们在上面创建的列。另外,我们转换 bins (箱标签)从因子到数字,这样 x 轴将是连续的,而不是离散的。

tmp_df %>%
ungroup %>%
mutate(bins = as.numeric(as.character(bins))) %>%
ggplot(aes(x=bins, y=n, fill = group)) +
geom_bar(stat='identity') +
scale_fill_manual(values=c(hcl(seq(15,375,length.out=6)[1:5],100,65),"black"))

请告诉我这是否是您的想法。

enter image description here

关于r - 在 ggplot2 中,如何将堆叠直方图中的小值条形组合在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41274625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com