ggplot: почему автоматический текст печатается при заполнении легенды?

#r #ggplot2 #plot #legend

#r #ggplot2 #график #легенда

Вопрос:

Как я могу удалить a напечатанные внутри каждого fill ? (и меня также интересует объяснение того, почему a появляется в первую очередь)

введите описание изображения здесь

У меня есть

 > head(p)
  studie n_otte
1      B     N0
2      B    N3b
3      B    N3b
4      B     N0
5      B     N0
6      B    N3b
  

И

 # Colors
colsze = c("#E1B930", "#2C77BF","#E38072","#6DBCC3", "grey40", "black", "#8B3A62")
# Data and plot
p %>% as_tibble() %>% 
  mutate(nystudie=as.character(studie),
         n_otte=as.factor(n_otte)) %>% 
  bind_rows(., mutate(., nystudie="all")) %>% 
  count(nystudie, n_otte) %>%
  ggplot(aes(nystudie, n, color = n_otte, fill= n_otte, label=n))   
  geom_col(position = position_dodge2(preserve = "single", padding = 0.1)) 
  geom_text(aes(label=n),position = position_dodge2(0.9), vjust=0, fontface=2)  
  scale_fill_manual(values = alpha(colsze, .2), 
                    name="")   
  scale_color_manual(values = colsze, 
                     name="")   
  guides(fill = guide_legend(nrow = 1))   theme(legend.position="top")
  

Дающий этот участок

введите описание изображения здесь

Я попытался добавить

   guides(fill = guide_legend(nrow = 1, override.aes = list(fill = alpha(colsze,0.5), color = colsze, lwd = .8)))  
  

Но получил сообщение об ошибке:

 [[<-.data.frame(*tmp*, i, value = c("#E1B93080", "#2C77BF80",  : 
  replacement have 7 rows, data have 6
  

Я знаю, что colsze указано семь цветов, я просто предполагаю, что данные, содержащие 6 значений, будут выбирать начальные 6 цветов.

 > colsze
[1] "#E1B930" "#2C77BF" "#E38072" "#6DBCC3" "grey40"  "black"   "#8B3A62"
  

Данные

 p <- structure(list(studie = c("B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B"), n_otte = structure(c(1L, 6L, 6L, 1L, 1L, 
6L, 1L, 6L, 2L, 6L, 6L, 6L, 6L, 1L, 1L, 1L, 3L, 1L, 6L, 1L, 1L, 
2L, 1L, 1L, 1L, 1L, 4L, 5L, 1L, 4L, 5L, 6L, 1L, 1L, 5L, 1L, 1L, 
6L, 1L, 1L, 1L, 6L, 1L, 1L, 1L, 6L, 6L, 6L, 1L, 6L), .Label = c("N0", 
"N1", "N2a", "N2b", "N2c", "N3b"), class = "factor")), row.names = c(NA, 
-50L), class = "data.frame")
  

Ответ №1:

Попробуйте это. Раньше у вас возникали такого рода проблемы из-за aes() определений. Поскольку у вас есть такие опции, как fill enabled, geom_text() используйте, чтобы взять их все и отобразить в легендах. Одним из вариантов является использование аргумента show.legend , который позволяет скрывать нежелательные элементы в легендах. Вот код:

 library(tidyverse)
# Colors
colsze = c("#E1B930", "#2C77BF","#E38072","#6DBCC3", "grey40", "black", "#8B3A62")
# Data and plot
as_tibble(p) %>% 
  mutate(nystudie=as.character(studie),
         n_otte=as.factor(n_otte)) %>% 
  bind_rows(., mutate(., nystudie="all")) %>% 
  count(nystudie, n_otte) %>%
  ggplot(aes(nystudie, n, color = n_otte, fill= n_otte, label=n))   
  geom_col(position = position_dodge2(preserve = "single", padding = 0.1)) 
  geom_text(aes(label=n),position = position_dodge2(0.9),
            vjust=0, fontface=2,show.legend = F)  
  scale_fill_manual(values = alpha(colsze, .2), 
                    name="")   
  scale_color_manual(values = colsze, 
                     name="")   
  guides(fill = guide_legend(nrow = 1))   theme(legend.position="top")
  

Вывод:

введите описание изображения здесь

Ответ №2:

Из ggplot v3.2 мы также можем просто вставить key_glyph = draw_key_blank в наш geom_text вызов:

 p %>% as_tibble() %>% 
  mutate(nystudie=as.character(studie),
         n_otte=as.factor(n_otte)) %>% 
  bind_rows(., mutate(., nystudie="all")) %>% 
  count(nystudie, n_otte) %>%
  ggplot(aes(nystudie, n, color = n_otte, fill= n_otte, label=n))   
  geom_col(position = position_dodge2(preserve = "single", padding = 0.1))  
  geom_text(aes(label = n), key_glyph = draw_key_blank,
            position = position_dodge2(0.9), vjust=0, fontface=2)  
  scale_fill_manual(values = alpha(colsze, .2), 
                    name="")   
  scale_color_manual(values = colsze, 
                     name="")   
  guides(fill = guide_legend(nrow = 1))   
  theme(legend.position="top")
  

введите описание изображения здесь