2012-07-30 138 views
61

我有一個簡單的數據框,我試圖使用ggplot2做一個組合的線和點圖。假設我的數據是這樣的:刪除ggplot2中的額外圖例

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
       group=c(rep("a",10),rep("b",10))) 

而且我想做一個情節:

g <- ggplot(df, aes(x=x, y=y, group=group)) 
g <- g + geom_line(aes(colour=group)) 
g <- g + geom_point(aes(colour=group, alpha = .8)) 
g 

結果看起來很好,但有一個例外。它有一個額外的圖例,顯示我的geom_point圖層的alpha。

Extra Legend for geom_point transparency

我怎能顯示組色彩的傳說,而不是一個顯示我的阿爾法設置?

回答

123

美學可以設置一個ggplot呼叫內映射

  • aes(...)限定的審美是映射從數據,和一個圖例創建。
  • 審美也可能是設置爲單個值,方法是將其定義在aes()之外。

在這種情況下,它似乎要設置alpha = 0.8地圖colour = group

要做到這一點,

放置alpha = 0.8aes()定義之外。

g <- ggplot(df, aes(x = x, y = y, group = group)) 
g <- g + geom_line(aes(colour = group)) 
g <- g + geom_point(aes(colour = group), alpha = 0.8) 
g 

enter image description here

對於任何映射變量可以通過在適當的scale_...呼叫使用guide = 'none'剿圖例的外觀。例如。

g2 <- ggplot(df, aes(x = x, y = y, group = group)) + 
     geom_line(aes(colour = group)) + 
     geom_point(aes(colour = group, alpha = 0.8)) 
g2 + scale_alpha(guide = 'none') 

這將

編輯 @ Joran的評論是點上,我做了我的答案更全面

+12

這是正確的方法中,由於OP被設定,而不是映射的審美,但一般可以使用類似'克+ scale_alpha(導向=「無」)'抑制任何圖例的外觀。 – joran 2012-07-30 03:15:05

+0

確實。答案已經詳細闡述。有一個全面的答案更有意義,而不僅僅是OP問題。 – mnel 2012-07-30 03:32:33

+4

非常感謝您的補充解釋。這對幫助我理解ggplot的哲學有很長的路要走。 – Wilduck 2012-07-30 15:26:45

0

對於舊版本GGPLOT2的(0.9之前的版本中返回相同的情節.2,在2012年底發佈),這個答案應該可以工作:

我試過這個與colour_scale,它沒有工作。看起來colour_scale_hue項目的功能與默認參數TRUE一樣。我加了scale_colour_hue(legend=FALSE),它工作。

我不知道這是否是在ggplot所有的色標項目

+3

在'scale_ *'調用中使用'legend'不推薦使用'scale_colour_hue(guide =「none」)''。 – Gregor 2013-06-05 17:32:37

+2

考慮到'legend = FALSE'已被廢棄,正如@shujaa註釋所指出的,這實際上是一個重複的答案,即將'guide =「none」'添加到'scale_fill/color *'函數。 – 2014-03-19 17:32:31

13

,你不想要的部分後,只需添加show.legend = F代碼的情況。

g <- ggplot(df, aes(x=x, y=y, group=group)) 
g <- g + geom_line(aes(colour=group)) 
g <- g + geom_point(aes(colour=group, alpha = .8), show.legend = F)