2015-09-26 20 views
6

我正在用ggplot繪製兩個數據集。一個應該是一條線,另一個應該是點。我能得到這個工作如下:ggplot2 - 帶有線和點的圖表,用於兩個數據集傳奇問題

d1 <- filter(d, variable==lineVar) 
d2 <- filter(d, variable==dotVar) 
g <- ggplot(d1, aes(clarity, x=xv, y=yv)) 
g <- g + geom_line(aes(colour=variable)) 
g <- g + ggtitle(title) 
g <- g + xlab(xl) 
g <- g + ylab(yl) 
g <- g + geom_point(data=d2, size=4, aes(colour=variable)) 

Output of ggplot2

唯一的問題就是傳奇!正如你所看到的,「觀察」數據集在圖例中有一條線+點,當它真的只是一個點。而對於「預測」則相反,它應該只是一條線。

有什麼方法可以得到更清晰/更準確的圖例?

回答

5

您可以使用override.aes更改圖例而不更改圖。您沒有提供示例數據,因此我使用內置的mtcars數據幀進行了說明。關鍵代碼行以guides開頭。 shape=c(16,NA)通過將其顏色設置爲NA來擺脫圖例中的其中一個點標記。 linetype=c(0,1)通過將其線型設置爲0來擺脫其他傳說中的線條。此外,您不需要在每行代碼後保存繪圖。只需在每行添加一個+,並將它們全部串在一起,如下例所示。

library(reshape2) 
library(ggplot2) 

mtcars$mpg.line = mtcars$mpg 
mtcars.m = melt(mtcars[,c("mpg","mpg.line","wt")], id.var="wt") 
mtcars.m$variable = factor(mtcars.m$variable) 

ggplot() + 
    geom_line(data=mtcars.m[mtcars.m$variable=="mpg.line",], 
      aes(wt, value, colour=variable), lwd=1) + 
    geom_point(data=mtcars.m[mtcars.m$variable=="mpg",], 
      aes(wt, value, colour=variable), size=3) + 
    guides(colour=guide_legend(override.aes=list(shape=c(16,NA), linetype=c(0,1)))) + 
    theme_grey(base_size=15) 

enter image description here

相關問題