2014-10-27 42 views
11

已经搜索了所有相关的线程,但找不到解决方案。ggplot2:点和线的不同的图例符号

这里是我的代码和附加剧情结果:

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

,导致该地块:

enter image description here

正如你所看到的,所有的说明图标看起来是一样的。我想要的是点显示为点,两条线(“回归”和“趋势线”)显示为线。

我试图用

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

但再所有图标给我以同样的方式,我无法弄清楚如何区分它们

I'm新R和这我的第一个“复杂”情节。尝试找出最与网上帮助和谷歌,但无法找到解决这个问题。谢谢大家的时间和帮助!

这里我的数据的dput

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

回答

18

override.aes绝对是一个良好的开端定制的传说。在你的情况,你可以将它们设置为NA删除不需要的shape在传说中,并设置不必要的linetypeblank

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

非常感谢亨里克。您在“scale_colour_manual”中插入了“指南”。如果我这样做,R告诉我它不知道函数“指南”。我将它修改为“+ guides(color = guide_legend(override.aes = list(linetype = c(rep(”blank“,7),”solid“,”dashed“),shape = c(rep(16,7 ),NA,NA))))“它工作。你能解释为什么吗?此外,我并没有在这一行中深入了解所有的命令。这真的是唯一的方法吗?我觉得这是一个非常标准的程序,因为代码对我来说很复杂。 – 2014-10-27 15:08:00

+0

按照设计'ggplot'在你放入'aes'(或不放置)的东西与所产生的图例外观之间有很强的联系。自定义传说可能会有些ha ha。您可以搜索“guide_legend(override.aes”](http://stackoverflow.com/search?q= [r] +%22guide_legend%28override.aes%22)以在答案中寻找替代解决方案。 – Henrik 2014-10-27 15:26:57

+0

我一直在做一个小时的情节,这篇文章对我非常有帮助,比我看到的其他东西更容易,谢谢! – Nova 2015-09-15 15:33:29

相关问题