2014-10-27 44 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

相關問題