将线性模型abline添加到ggplot中的log-log图中

时间:2013-12-16 17:45:02

标签: r ggplot2

我似乎无法复制向log-log ggplot添加线性abline。下面的代码说明。感谢我出错的想法。

d = data.frame(x = 100*sort(rlnorm(100)), y = 100*sort(rlnorm(100)))
(fit = lm(d$y ~ d$x))

# linear plot to check fit
ggplot(d, aes(x, y)) + geom_point() + geom_abline(intercept = coef(fit)[1], slope = coef(fit)[2], col='red')

# log-log base plot to replicate in ggplot (don't worry if fit line looks a bit off)
plot(d$x, d$y, log='xy')
abline(fit, col='red', untf=TRUE)

# log-log ggplot
ggplot(d, aes(x, y)) + geom_point() + 
  geom_abline(intercept = coef(fit)[1], slope = coef(fit)[2], col='red') +
  scale_y_log10() + scale_x_log10()

2 个答案:

答案 0 :(得分:7)

在绘制x和y之间的线性关系时,可以将geom_smooth()method="lm"一起使用。

ggplot(d, aes(x, y)) + geom_point() + geom_smooth(method="lm",se=FALSE)+
  scale_y_log10() + scale_x_log10()  

更新

似乎geom_abline()与函数untf=TRUE没有参数abline()

解决方法是使用geom_line()及其中的新数据框,其中包含使用线性模型的系数或使用函数predict()计算的y值。

ggplot(d, aes(x, y)) + geom_point() + 
  geom_line(data=data.frame(x=d$x,y=coef(fit)[1]+coef(fit)[2]*d$x))+
  scale_y_log10() + scale_x_log10()

ggplot(d, aes(x, y)) + geom_point() + 
  geom_line(data=data.frame(x=d$x,y=predict(fit)))+
  scale_y_log10() + scale_x_log10()

enter image description here

答案 1 :(得分:3)

如果您在日志中运行回归,适合该行,并对比例进行转换,则可以使用geom_abline

d = data.frame(x = 100*sort(rlnorm(100)), y = 100*sort(rlnorm(100)))
(fit = lm(log(d$y) ~ log(d$x)))

p <- ggplot(d, aes(x, y)) + geom_point() +
    geom_abline(intercept = coef(fit)[1], slope = coef(fit)[2], col='red') +
    scale_y_continuous(trans=log_trans()) +
    scale_x_continuous(trans=log_trans())

enter image description here