2014-10-27 13 views
11

haben bereits alle verwandten Themen dazu durchsucht, konnten aber keine Lösung finden.ggplot2: Verschiedene Legendensymbole für Punkte und Linien

Hier ist mein Code und das angeschlossene Grundstück Ergebnis:

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

, die in dieser Handlung führt:

enter image description here

Wie Sie sehen können, alle Legend Icons gleich aussehen. Ich möchte, dass die Punkte als Punkte angezeigt werden und die zwei Linien ("Regression" und "Trendlinie") als Linien dargestellt werden.

Ich versuchte

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

zu verwenden, aber das gibt mir wieder alle Symbole in der gleichen Art und Weise, und ich kann nicht herausfinden, wie zwischen ihnen

Ich bin neu zu R zu unterscheiden und dies ist meine erste "komplexe" Handlung. Versuchen Sie, herauszufinden, am meisten mit Online-Hilfen und Google aber kann keine Lösung für dieses Problem finden. Vielen Dank für Ihre Zeit und Hilfe!

hier ein dput meiner Daten:

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

Antwort

18

override.aes ist auf jeden Fall ein guter Start die Legende für die Anpassung. In Ihrem Fall können Sie unerwünschte shape in der Legende entfernen, indem sie zu NA Einstellung und stellen Sie unerwünschte linetype-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

Vielen Dank Henrik. Sie haben "guide" in "scale_colour_manual" eingefügt. Wenn ich das tue, sagt mir R, dass es die Funktion "guide" nicht kennt. Ich änderte es dann zu "+ Guides (color = guide_legend (override.aes ​​= Liste (Linientyp = c (rep (" leer ", 7)," fest "," gestrichelt "), Form = c (rep (16, 7)), NA, NA)))) "und es hat funktioniert. Kannst du erklären warum? Außerdem bekomme ich in dieser Zeile nicht alle Befehle für mich. Ist das wirklich der einzige Weg dies zu tun? Ich finde es ein sehr Standardverfahren und dafür ist der Code ziemlich kompliziert für mich. –

+0

Durch das Design hat 'ggplot' eine starke Verbindung zwischen dem, was Sie in' aes' geschrieben haben (oder nicht) und dem resultierenden Aussehen der Legende. Das Anpassen von Legenden kann leicht hackisch sein. Sie können [SO nach "guide_legend (override.aes"] (http://stackoverflow.com/search?q= [r] +% 22guide_legend% 28override.aes% 22) suchen, um nach alternativen Lösungen unter den Antworten zu suchen – Henrik

+0

Ich habe stundenlang an einer Verschwörung gearbeitet, und dieser Beitrag hat mir enorm geholfen, viel einfacher als alles, was ich mir angesehen habe. – Nova

Verwandte Themen