繁体   English   中英

R,ggplot堆叠的条形图,位置=“填充”和标签

[英]R, ggplot stacked bar-chart with position = “fill” and labels


我正在使用ggplot2 ,使用geom_bar()position = "fill"选项将堆叠的barplot设置为具有相对值的100%。
这是我的代码:

test <- data.frame (x = c('a','a','a','b','b','b','b')
        ,k = c('k','j','j','j','j','k','k')
        ,y = c(1,3,4,2,5,9,7))

plot <- ggplot(test, aes(x =x, y = y, fill = k)) 
plot <- plot + geom_bar(position = "fill",stat = "identity") 
plot <- plot +  scale_fill_manual(values = c("#99ccff", "#ff6666"))
plot <- plot  + geom_hline(yintercept = 0.50)+ggtitle("test")
plot

结果如下:

在此处输入图片说明

但是,我需要在各个栏上以及“子栏”上添加标签。 为此,我使用了geom_text():

plot  + geom_text(aes(label=y, size=4))

但是结果不好。 我没有运气地尝试过hjustvjust参数,还使用了类似的方法:

plot  + geom_text(aes(label=y/sum(y), size=4))

但是我没有达到所需的结果(我没有添加所有测试,以使无用的图像不会使问题超载,如果需要,请询问!)。
知道要有一些不错的居中标签吗?

label指定显示什么y指定where展示。 由于您正在使用position = "fill" y轴比例,因此需要使用累积总和以每个 x的比例来计算标签位置( geom_text(aes(y = ...)) )。 另外,要仅显示给定颜色的总比例,您将需要为每个x,k组合提取第N行。 在这里,我正在构建一个单独的test_labels数据集,用于geom_text以显示自定义标签:

test <- data.frame (x = c('a','a','a','b','b','b','b'),
                    k = c('k','j','j','j','j','k','k'),
                    y = c(1,3,4,2,5,9,7))

test_labels = test %>%
  arrange(x, desc(k)) %>%
  group_by(x) %>%
  mutate(ylabel_pos = cumsum(y)/sum(y),
         ylabel = y/sum(y)) %>%
  group_by(k, add = TRUE) %>%
  mutate(ylabel = sum(ylabel)) %>%
  slice(n())

 ggplot(test, aes(x =x, y = y, fill = k)) +
  geom_bar(position = "fill", stat = "identity") +
  scale_fill_manual(values = c("#99ccff", "#ff6666")) +
  geom_hline(yintercept = 0.50) + 
  geom_text(data = test_labels, 
            aes(y = ylabel_pos, label=paste(round(ylabel*100,1),"%")), 
            vjust=1.6, color="white", size=3.5) +
  ggtitle("test")

结果:

> test_labels
# A tibble: 4 x 5
# Groups:   x, k [4]
       x      k     y ylabel_pos    ylabel
  <fctr> <fctr> <dbl>      <dbl>     <dbl>
1      a      j     4  1.0000000 0.8750000
2      a      k     1  0.1250000 0.1250000
3      b      j     5  1.0000000 0.3043478
4      b      k     7  0.6956522 0.6956522

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM