2016-02-05 133 views
-2

請考慮下面我使用下面的代碼創建的圖表。我想添加一個可能會說「中位數」和「90%置信區間」的圖例。我已經看到這個問題部分解決了here(感謝羅蘭),但是當我嘗試在我自己的代碼中實現它時,圖例看起來很傻,因爲中間線沒有填充色帶。有什麼方法可以讓傳說看起來明智嗎?它只顯示中線的一條線和功能區的填充框。用不同的圖層類型手動爲ggplot添加圖例

enter image description here

library(ggplot2) 
middle = data.frame(t=c(0,1,2,3),value=c(0,2,4,6)) 
ribbon = data.frame(t=c(0,1,2,3),min=c(0,0,0,0),max=c(0,4,8,12)) 
g = ggplot() 
g = g + geom_line (data=middle,aes(x=t,y=value),color='blue',size=2) 
g = g + geom_ribbon(data=ribbon,aes(x=t,ymin=min,ymax=max),alpha=.3,fill='lightblue') 
print(g) 

enter image description here

library(ggplot2) 
middle = data.frame(t=c(0,1,2,3),value=c(0,2,4,6)) 
ribbon = data.frame(t=c(0,1,2,3),min=c(0,0,0,0),max=c(0,4,8,12)) 
g = ggplot() 
g = g + geom_ribbon(data=ribbon,aes(x=t,ymin=min,ymax=max,fill="CI" ,color="CI")) 
g = g + geom_line (data=middle,aes(x=t,y=value,      color="median")) 
g = g + scale_colour_manual(values=c("lightblue","blue")) 
g = g + scale_fill_manual (values=c("lightblue")) 
print(g) 
+1

如果你想有一個傳說,裏面'aes'映射值'color'和'fill'和使用'scale_color_manual'和'scale_fill_manual'指定標籤和顏色。 – Roland

+0

嗨羅蘭,解決問題的答案只有幫助。我試圖實現它(見上文),但傳說看起來非常愚蠢。有什麼方法讓這個傳說看起來合理嗎? –

回答

1

首先,設置guide="none"scale_fill_manual(),然後使用函數guides()與參數override.aes=根據線和置信區間改變linetype=fill=

ggplot() + 
    geom_ribbon(data=ribbon,aes(x=t,ymin=min,ymax=max,fill="CI" ,color="CI")) + 
    geom_line(data=middle,aes(x=t,y=value,color="median"))+ 
    scale_colour_manual("Legend",values=c("lightblue","blue")) + 
    scale_fill_manual(values=c("lightblue"),guide="none")+ 
    guides(colour = guide_legend(override.aes = list(linetype=c(0,1),fill=c("lightblue","white")))) 

enter image description here

+0

謝謝Didzis。如果有人知道更有效的方式來做到這一點,那會很棒。看起來像這樣的圖表,ggplot實際上不是正確的繪圖環境,僅僅因爲在其他環境中,你可以用一個單一的簡單的代碼行來獲取圖例,而不需要多行,你必須指定顏色線條和再次,傳說中所有東西的顏色。 –