如何在ggplot line / points中结合特殊值?

时间:2016-08-18 09:50:06

标签: r ggplot2

我对ggplot很新,但我喜欢系统地构建你的情节。尽管如此,我还是想要达到预期的效果。我可以复制你有分类数据的地块。然而,对于我的使用,我经常需要将模型拟合到某些观察结果,然后在组合图中突出显示它们。使用通常的绘图功能,我会这样做:

library(splines)
set.seed(10)

x <- seq(-1,1,0.01)
y <- x^2
s <- interpSpline(x,y)
y <- y+rnorm(length(y),mean=0,sd=0.1)



plot(x,predict(s,x)$y,type="l",col="black",xlab="x",ylab="y")
points(x,y,col="red",pch=4)
points(0,0,col="blue",pch=1)
legend("top",legend=c("True Values","Model values","Special Value"),text.col=c("red","black","blue"),lty=c(NA,1,NA),pch=c(4,NA,1),col=c("red","black","blue"),cex = 0.7)

我最大的问题是如何为ggplot构建数据框,然后自动绘制图例?在这个例子中,我如何将其转换为ggplot以获得类似的情节?或者ggplot不是为这种情节制作的?

请注意,这只是一个玩具示例。通常,模型值来自更复杂的模型,以防万一你想在ggplot中使用stat。

1 个答案:

答案 0 :(得分:3)

这里的关键部分是你可以通过给出一个字符串来映射aes中的颜色,这将产生一个图例。在这种情况下,不需要在data.frame中包含特殊值。

df <- data.frame(x = x, y = y, fit = predict(s, x)$y)

ggplot(df, aes(x, y)) + 
  geom_line(aes(y = fit, col = 'Model values')) +
  geom_point(aes(col = 'True values')) + 
  geom_point(aes(col = 'Special value'), x = 0, y = 0) +
  scale_color_manual(values = c('True values' = "red", 
                                'Special value' = "blue", 
                                'Model values' = "black"))

enter image description here