2015-04-15 158 views
0

我有一些来自本地流的年度高峰流量数据,并且想要创建洪水频率图。这是我的数据样本:在R的对数图上绘制非线性趋势线

#Set up maximum flow data 
flow=sample(seq(10,1000,20),100,replace=TRUE) 
#Order flows from largest to smallest 
flow=as.data.frame(flow[order(flow, decreasing=TRUE)]) 
names(flow)="max" 
#rank flows from largest to smallest 
flow$"rank"=seq(1,nrow(flow),1) 
#Calculate the return interval in years 
flow$"RI"=(nrow(flow)+1)/flow$"rank" 
plot(flow$"max"~flow$"RI",type='p', log='xy',xlab='Return Interval', ylab='Max flow') 

接下来我能计算出对数函数,以获得最佳的用线:

logMod = nls(max ~ (a*log10(RI)+b), data=flow, 
    start = list(a = 0, b = 0)) 

现在我真正的问题是如何绘制这条线在上面创建的对数日志图上,而不必每次检查我的nls函数中创建的变量是什么?我想要一些方法来快速绘制最佳拟合线,如果我不喜欢它,请将nls函数改为一种新的非线性方程。例如,如果对数线与数据不一致,我可以将nls函数中的公式改为指数函数或多项式函数。

回答

2

您可以使用predict()这个

x <- seq(min(flow$RI), max(flow$RI), length.out=100) 
y <- predict(logMod, data.frame(RI=x)) 
lines(x,y, col="red") 
+0

再次感谢MrFlick!很有帮助。 – Pinus2Quercus