Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ggplot2: Different legend symbols for points and lines

Tags:

already searched all related threads about this but could not find a solution.

Here is my code and the attached plot result:

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

Which results in this plot:

enter image description here

As you can see, all Legend Icons look the same. What I want is that the points are shown as points and the two lines ("Regression" and "Trendline") are shown as lines.

I tried to use

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

but that gives me again all icons in the same way and I can not figure out how to distinguish between them

I´m new to R and this is my first "complex" plot. Try to figure out most with online helps and google but can´t find a solution for this problem. Thank you all for your time and help!

Here a dput of my data:

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")) 
like image 726
pat-s Avatar asked Oct 27 '14 12:10

pat-s


People also ask

How do you change the legend shape in R?

Now if we want to change only Legend shape then we have to add guides() and guide_legend() functions to the geom_point() function. Inside guides() function, we take parameter named 'color' because we use color parameter for legend in ggplot() function.

What does %>% mean in Ggplot?

1. the %>% is a pipe operator that is actually part of the dplyr library (along with the filter function) not from the ggplot2 library. To sample 1%, there is a sample_frac function in the dplyr library.

How do I change the legend value in ggplot2?

You can use the following syntax to change the legend labels in ggplot2: p + scale_fill_discrete(labels=c('label1', 'label2', 'label3', ...))


1 Answers

override.aes is definitely a good start for customizing the legend. In your case you may remove unwanted shape in the legend by setting them to NA, and set unwanted linetype to 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

like image 153
Henrik Avatar answered Oct 14 '22 08:10

Henrik