Условно добавьте метки в составной барплот ggplot - PullRequest
0 голосов
/ 10 марта 2019

Это похоже на предыдущие вопросы, но я еще не нашел решение, которое работает.

У меня есть gpplot с накоплением почти точно так же, как тот, что указан здесь . Как и этот пользователь, я хочу, чтобы метки категорий были только для тех баров с числом> 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 Ответ

1 голос
/ 11 марта 2019

Ваш 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)
...