2015-09-26 57 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