#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")