在R中的对数 - 对数图上使用曲线绘图

时间:2016-12-20 22:45:58

标签: r

我是一名研究牛海带异速生长比例的博士生,我一直在尝试使用下面的代码将回归线和预测斜率线(斜率= 1)添加到我未记录数据的对数 - 对数图中,同时R将"运行"代码,适当的行不会出现在我的情节中。我认为它是日志缩放的一个问题,理想情况下我希望它看起来更像传统的日志图(比例为0.1,1,10,100,1000的轴)但我还没有。能够在R中弄清楚如何做到这一点。我已经包含了我正在使用的数据,我很感激您提供的任何帮助!

stipelengthcm - 1065.0  959.0  925.0  757.0  722.0  663.0  559.0  550.0  550.0  518.0  400.0  379.0 370.0  365.0  363.2  351.8  323.2  306.8  290.0  260.0  251.0  251.0  249.0  242.0 240.0  229.0  220.0

bulbwidthcm -10.0 16.0  7.8 10.0 10.0  8.5  5.0  6.0  6.0  4.6  4.4  5.6  5.0  7.0  4.2  4.4  5.4  5.4 5.6  6.0  4.0  3.8  4.6  5.0  4.6  5.5  5.4
library(lmodel2)
regrlogkelp<-lmodel2(log(stipelengthcm)~log(bulbwidthcm), data=logkelp, nperm=99)
regrlogkelp

plot(stipelengthcm, bulbwidthcm, log="xy", xlab = "Stipe Length (cm)", ylab = "Bulb Width (cm)", pch = 1, col = "black")
curve(exp(regrlogkelp$regression[3,2]) * x^(regrlogkelp$regression[3,3]), add = T)
var < -(mean(bulbwidthcm)/exp(regrlogkelp$regression[3,2]))^(1/regrlogkelp$regression[3,3])
curve((x^2)*(mean(bulbwidthcm)/var^2), add =T, lty = "dashed")

1 个答案:

答案 0 :(得分:1)

您可以在R基础图形或ggplot2中执行此操作。我们试试ggplot2

假设您的数据位于logkelp,而您的回归位于regrlogkelp

首先从模型中做出预测。

#make predicted values
logkelp$logcurve1 <- regrlogkelp$regression[3,2] + 
log(bulbwidthcm)*regrlogkelp$regression[3,3]

加载ggplot2并询问点和预测线。

library(ggplot2)

ggplot(data=logkelp) +

#plots the points
geom_point(aes(x=bulbwidthcm, y=stipelengthcm)) +

#draws the prediction line; note that y here is exponentiated and matches your expression
geom_line(aes(x=bulbwidthcm, y=exp(logcurve1))) +

#put the x axis on the log scale and designate where tick marks will be
scale_x_log10(breaks=seq(0,20, by=1)) +

#put the y axis on the log scale and designate where tick marks will be
scale_y_log10(breaks=seq(0,2000, by=100)) +

#change from the default ggplot2 style
theme_bw(base_size = 15)

enter image description here

如果您愿意,可以更改轴标签和颜色。如果你想做自信乐队,请看看geom_ribbon()

我认为为什么你的情节没有出现是因为你的curve()陈述的结果远远高于你的积分密谋区域。 R正在执行它,但您必须更改比例才能看到它。您正在混合exp()log()。它也令人困惑,因为X和Y在回归和图表之间交换。

这实际上是R正在绘制curve()的结果:

plot(stipelengthcm, bulbwidthcm, log="xy", 
xlab = "Stipe Length (cm)", ylab = "Bulb Width (cm)", pch = 1, col = "black", 
ylim=c(1,100000))

enter image description here