在ggplot2图中添加一行并调整图例

时间:2011-08-08 15:12:08

标签: r ggplot2

我正在使用ggplot2来显示按值着色的点。另外,我想在这些数据上显示回归线。

这是我正在使用的数据的一个示例:

structure(list(a = c(63.635707116462, 59.7200565823145, 56.0311239027684, 
53.1573088984712, 51.0192317467653, 48.0727441921859, 47.1516684444444, 
45.5081981068289, 43.5874967485549, 43.3163255512322), b = c(278.983796321269, 
254.833332215134, 234.812503036992, 221.519477352253, 212.013474843663, 
199.926648466351, 194.577007436116, 186.506133515809, 179.411968705754, 
172.056487287103), col = c(18.36245, 22.03494, 25.70743, 29.37992, 
33.05241, 36.7249, 40.39739, 44.06988, 47.74237, 51.41486), predict = c(275.438415187452, 
256.049214397717, 237.782656695549, 223.552332598712, 212.965175538386, 
198.374997400175, 193.814089203754, 185.676086057123, 176.165312823424, 
174.82254927815)), .Names = c("a", "b", "col", "predict"), row.names = c(NA, 
-10L), class = "data.frame")

到目前为止我使用的代码如下:

p <- ggplot(data = df, aes(x = a, y = b, colour=col)) + geom_point()
p + stat_smooth(method = "lm", formula = y ~ x, se = FALSE)

enter image description here

但是,这不会产生直线(因为它是平滑的),所以我尝试按照ggplot2上的一个示例(使用qplot)并执行以下操作:< / p>

model <- lm(b ~ a, data = df)
df$predict <- stats::predict(model, newdata=df) 
p <- ggplot(data = df, aes(x = a, y = b, colour=col) ) + geom_point() 
p + geom_line(aes(x = a, y = predict)) 

在示例中,使用+ geom_line(data=grid)添加一行,在我的情况下为+ geom_line(data=df)。这只是将点连接在一起,而不是在图上画一条直线。如何在这个完全笔直的情节上绘制一条线?

我对剧情的另一个问题是重命名传奇。我希望数据有两个单词的标题(例如'Z Density'),但我不知道如何更改它。我尝试使用+ scale_colour_discrete(name = "Fancy Title")+ scale_linetype_discrete(name = "Fancy Title")使用来自this问题的建议,但它们不起作用,因为我的数据用值着色。

1 个答案:

答案 0 :(得分:3)

正如@Andrie所说,使用method =“lm”给出一个线性模型。关于第二个问题,请使用scale_color_continuous()

p <- ggplot(data = df, aes(x = a, y = b, colour=col)) + geom_point()
p + stat_smooth(method = "lm", se = FALSE) + 
    scale_colour_continuous(name = "My Legend")

您也不需要进行所有预测。 ggplot()会为你做这件事,这是一个很大的好处。