ggplot:标签在条形图中加倍

ggplot: labes are doubled in bar chart

我正在尝试制作水平堆叠条形图。我想用相应的数字(计数)标记条形图的每个部分。这些标签出现了两次,我现在不知道为什么。如何让“92”等只出现一次?

代码:

library(ggplot2)
library(dplyr)
library(plyr)

data2 <- data.frame(System=rep(c('participants opinion'), each=5),
                    attitude=rep(c('totally agree','agree somewhat','unsure','disagree somewhat','totally disagree'), times=2),
                    count=c(92, 83, 22, 17, 6))

data2$attitude = factor(data2$attitude, levels = c('unsure','totally disagree','disagree somewhat','agree somewhat','totally agree'))
data2 = arrange(data2, System, desc(attitude))
data2 = ddply(data2, .(System), transform, pos = (cumsum(count) - 0.5 * count))
cbPalette <- c("#999999", "#2A7AD4", "#5C96D7", "#D3A253", "#D48F1D")

ggplot(data2, aes(x = factor(System), y = count, fill = attitude)) +
  geom_bar(stat = "identity", width = .3) +
  geom_text(aes(y = pos, label = count), size = 4) +
  coord_flip() +
  theme(panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.title.y = element_blank()) +
  scale_fill_manual(values=cbPalette)

您的 data2 对象每个计数有 2 行,如果您通过以下方式删除每一行:

label_data <- data2 |> 
  split(~count) |> 
  purrr::map_dfr(~.x |> head(1))

并将其放入:

geom_text(data = label_data, aes(y = pos, label = count), size = 4)

你可以避免这种情况