2014-10-27 23 views
11

przeszły już wyszukiwanie wszystkich powiązanych tematów na ten temat, ale nie można znaleźć rozwiązania.ggplot2: Różne symbole legendy dla punktów i linii

Oto mój kod i załączony wynik działki:

g <-ggplot(NDVI2, aes(LAI2, NDVI, colour = Legend)) + 
    theme_bw (base_family = "Times") + 
    scale_colour_manual (values = c("purple", "green", "blue", "yellow", "magenta","orange", "cyan", "red", "black")) + 
    geom_point (size = 3) + 
    geom_smooth (aes(group = 1, colour = "Trendline"), method = "loess", size = 1, linetype = 5, se = FALSE) + 
    geom_smooth (aes(group = 1, colour = "Regression (log)"),linetype = 1, size=1.2,method = "lm", formula = y~ log(x), se = FALSE) + 
    labs (title = "Correlation of LAI and NDVI")+ 
    theme (legend.title = element_text (size = 15)) 

co skutkuje tym działki:

enter image description here

Jak widać, wszystkie ikony Legenda wyglądają tak samo. Czego chcę, to to, że punkty są pokazane jako punkty, a dwie linie ("Regresja" i "Linia trendu") są pokazane jako linie.

Próbowałem użyć

guides (colour = guide_legend (override.aes = list(size = 1.5))) 

ale to daje mi jeszcze raz wszystkich ikon w ten sam sposób i nie mogę dowiedzieć się, w jaki sposób ich odróżnić

jestem nowy na R i to jest moja pierwsza "złożona" fabuła. Spróbuj dowiedzieć się więcej dzięki pomocy online i Google, ale nie możesz znaleźć rozwiązania tego problemu. Dziękuję wszystkim za poświęcony czas i pomoc!

Tutaj dput moich danych:

dput(NDVI2) 
structure(list(MeanRED = c(3.240264, 6.97950484, 3.75052276, 
4.62617908, 4.07743944, 4.88961572, 3.15865532, 2.28368236, 3.40793788, 
4.28833416, 4.52529496, 2.45698208, 3.84003364, 4.31006672, 3.29672264, 
4.21926652, 4.64357012, 3.94445908, 3.95942484, 1.22673756, 4.70933136, 
5.33718396, 5.71857348, 5.7014266, 3.85938572, 6.07816804, 2.93602476, 
5.00289296), MeanNIR = c(46.8226195806452, 48.4417953548387, 
47.8913064516129, 43.9416386774194, 44.7524788709677, 52.2142607741935, 
48.6422146774194, 44.6617992580645, 57.7213822580645, 58.5066447096774, 
56.6924350967742, 57.4100250967742, 58.0419292903226, 58.7054423225806, 
58.5283540645161, 54.7658463548387, 58.8950077096774, 58.2421209354839, 
57.8538210645161, 50.209727516129, 59.5780209354839, 60.1662100645161, 
62.1929408387097, 60.3309026451613, 57.859932516129, 63.5678422258065, 
55.2536370967742, 60.1808743548387), NDVI = c(0.870552242769623, 
0.748129155560663, 0.854748647859414, 0.809496111062421, 0.832994214160536, 
0.828746627367857, 0.878046244390978, 0.902709173224405, 0.888500710549276, 
0.863417928083076, 0.852157374806182, 0.917918660181389, 0.875891666709934, 
0.863206160341016, 0.893353221193523, 0.856937918252258, 0.853834622095331, 
0.873141147848366, 0.871890732089488, 0.952300860559358, 0.853491201866442, 
0.837040994913869, 0.831587513918106, 0.827314084928549, 0.874937512911774, 
0.825455384542418, 0.899087753174211, 0.846498808949291), LAI2 = c(1.1, 
1.2, 1.3, 1.4, 2.1, 2.2, 2.3, 2.4, 3.1, 3.2, 3.3, 3.4, 4.1, 4.2, 
4.3, 4.4, 5.1, 5.2, 5.3, 5.4, 6.1, 6.2, 6.3, 6.4, 7.1, 7.2, 7.3, 
7.4), Legend = c("LAI 1", "LAI 1", "LAI 1", "LAI 1", "LAI 2", 
"LAI 2", "LAI 2", "LAI 2", "LAI 3", "LAI 3", "LAI 3", "LAI 3", 
"LAI 4", "LAI 4", "LAI 4", "LAI 4", "LAI 5", "LAI 5", "LAI 5", 
"LAI 5", "LAI 6", "LAI 6", "LAI 6", "LAI 6", "LAI 7", "LAI 7", 
"LAI 7", "LAI 7")), .Names = c("MeanRED", "MeanNIR", "NDVI", 
"LAI2", "Legend"), class = "data.frame", row.names = c("LAI 1-1", 
"LAI 1-2", "LAI 1-3", "LAI 1-4", "LAI 2-1", "LAI 2-2", "LAI 2-3", 
"LAI 2-4", "LAI 3-1", "LAI 3-2", "LAI 3-3", "LAI 3-4", "LAI 4-1", 
"LAI 4-2", "LAI 4-3", "LAI 4-4", "LAI 5-1", "LAI 5-2", "LAI 5-3", 
"LAI 5-4", "LAI 6-1", "LAI 6-2", "LAI 6-3", "LAI 6-4", "LAI 7-1", 
"LAI 7-2", "LAI 7-3", "LAI 7-4")) 

Odpowiedz

18

override.aes jest na pewno dobry początek dostosowując legendę. W twoim przypadku można usunąć niechciane shape w legendzie, ustawiając je do NA i ustaw niechcianych linetype do blank:

ggplot(data = NDVI2, aes(x = LAI2, y = NDVI, colour = Legend)) + 
    geom_point(size = 3) + 
    geom_smooth(aes(group = 1, colour = "Trendline"), 
       method = "loess", se = FALSE, linetype = "dashed") + 
    geom_smooth(aes(group = 1, colour = "Regression (log)"), 
       method = "lm", formula = y ~ log(x), se = FALSE, linetype = "solid") + 
    scale_colour_manual(values = c("purple", "green", "blue", "yellow", "magenta","orange", "cyan", "red", "black"), 
         guide = guide_legend(override.aes = list(
         linetype = c(rep("blank", 7), "solid", "dashed"), 
         shape = c(rep(16, 7), NA, NA)))) 

enter image description here

+1

Dziękuję bardzo Henrik. Wstawiłeś "guide" w "scale_colour_manual". Jeśli to zrobię, R mówi mi, że nie zna funkcji "przewodnika". Zmodyfikowałem go następnie na "+ guides (color = guide_legend (override.aes ​​= list (rodzaj linii = c (rep (" blank ", 7)," solid "," dashed "), shape = c (rep (16, 7), NA, NA)))) "i zadziałało. Czy możesz mi wytłumaczyć dlaczego? Ponadto nie otrzymuję dla mnie wszystkich poleceń w tej linii. Czy to naprawdę jedyny sposób na zrobienie tego? Uważam, że jest to bardzo standardowa procedura i że kod jest dla mnie dość skomplikowany. –

+0

Wg konstrukcji 'ggplot' ma silne powiązanie między tym, co wstawiasz w" aes "(lub nie) i wynikowym pojawieniu się legendy. Dostosowanie legend może być nieco hackish. Możesz [szukać SO z "guide_legend (override.aes"] (http://stackoverflow.com/search?q= [r] +% 22guide_legend% 28override.aes% 22), aby znaleźć alternatywne rozwiązania wśród odpowiedzi. – Henrik

+0

Pracuję nad fabułą przez wiele godzin, a ten post pomógł mi ogromnie, znacznie łatwiej niż cokolwiek innego, na co patrzyłem. – Nova

Powiązane problemy