向ggplot堆叠条形图添加标签

时间:2019-03-10 19:57:42

标签: r if-statement ggplot2 bar-chart

这与先前的问题类似,但是我还没有找到可行的解决方案。

我在ggplot中有一个堆叠的barplot,几乎与列出的here一样。像那个用户一样,我只想要计数> 20的那些条的类别标签。我尝试执行此处建议的子集解决方案以及ifelse语句。对于子集解决方案,我得到:

    Error in n > 20 : comparison (6) is possible only for atomic and list types

我的图表:

data %>% 
      count(groups, Response) %>%
      mutate(group = factor(groups)) %>% 
      ggplot(aes(groups, n, fill=Response)) + 
      geom_col(aes(fill = Response)) +
      geom_text(data=subset(data, n>20), aes(label=n), position=position_stack(0.5), size = 3)

我不知道共享数据是否有用,但是如有必要,我可以这样做。

1 个答案:

答案 0 :(得分:1)

data函数之后,您的n不包含count,只有您通过管道传输的匿名数据包含。这是三种解决方案:

1。

data %>% 
      count(groups, Response) %>%
      mutate(group = factor(groups)) %>% 
      {
        ggplot(., aes(groups, n, fill=Response)) + 
        geom_col(aes(fill = Response)) +
        geom_text(data=filter(., n>20), aes(label=n), position=position_stack(0.5), size = 3)
       }

2。

counts <- data %>% 
      count(groups, Response) %>%
      mutate(group = factor(groups))

ggplot(counts, aes(groups, n, fill=Response)) + 
      geom_col(aes(fill = Response)) +
      geom_text(data=filter(counts, n>20), aes(label=n), position=position_stack(0.5), size = 3)

3。

data %>% 
      count(groups, Response) %>%
      mutate(group = factor(groups)) %>% 
      ggplot(aes(groups, n, fill=Response)) + 
      geom_col(aes(fill = Response)) +
      geom_text(data=. %>% filter(n>20), aes(label=n), position=position_stack(0.5), size = 3)