Jak mogę mapować dowolną legendę (niepowiązaną) na istniejący ggplot?ggplot2: ręcznie dodaj legendę
Nota prawna: proszę, nie nienawidź mnie. Wiem, że najlepszym sposobem utworzenia legendy z "ggplot2" jest mapowanie danych w odpowiedni sposób i robię to w 99% przypadków. Tutaj jednak proszę o coś, co generalnie może dać mi jakąkolwiek legendę, której pragnę.
Jako przykład mam działkę, która wygląda nieco jak poniżej:
stworzony z tego kodu:
set.seed(42)
temp1 = cbind.data.frame(begin = rnorm(10, 0, 1), end = rnorm(10, 2, 1), y1 = 1:10, y2 = 1:10, id = as.character(1:10))
temp2 = cbind.data.frame(x = 0:2, y = 1:3*2)
temp3 = cbind.data.frame(x = seq(0.5, 1.5, 0.33))
temp = c()
plot1 = ggplot(data = temp, aes(x = x)) +
geom_vline(data = temp3, aes(xintercept = x), color = "red", linetype = "longdash") +
geom_segment(data = temp1, aes(y = y1, yend = y2, x = begin, xend = end, color = id)) +
geom_point(data = temp2, aes(x = x, y = y), shape = 4, size = 4) +
scale_color_discrete(guide = F)
plot1
i chcę dodać legendę, która zawiera:
- czerwona, długa linia pionowa o nazwie "l1"
- czarna, solidna linia pozioma o nazwie "l2"
- blok zielony wypełnione nazwie „L3”
idealnie chciałbym produkować że trochę tak (pseudo-kod naprzód):
plot2 = plot1 + guide(elements = list(list(type = "line", color = "red", linetype = "longdash", direction = "vertical", label = "l1"), list(type = "line", label = "l2"), list(type = "rect", fill = "green", label = "l3"))
moim najlepszym zgadywać, jak podejść do tego byłoby stworzenie niektóre pomocnicze pseudo-dane, które zostały naniesione/odwzorowane gdzieś niewidocznie na wykresie, a następnie użyte do stworzenia legendy, ale nie udało mi się uzyskać czegoś takiego, aby narysować mi legendę.
Po raz kolejny chodzi o to, w jaki sposób dodać niepowiązaną legendę do istniejącego wykresu, tj. Bez sprytnego odwzorowania oryginalnych danych na zmienne fabuły?
Można ręcznie skonstruować coś używając 'geom_text' i' geom_line'. –
Lub ręcznie dodaj coś za pomocą 'grid' i grobs. Lub spróbuj wypisać rozszerzenie do ggplot2, aby to zrobić. Wyobrażam sobie, że ktoś w końcu to zrobi, ponieważ podobne pytania pojawiają się bardzo często. –
Można "oszukiwać" i dodawać wypełnienie, które nie pojawi się na działce, a następnie użyć redagowania do edycji, ale podoba ci się etykieta wypełniająca. – user5029763