【问题标题】:Plotting a non-linear trendline on a logarithmic plot in R在 R 中的对数图上绘制非线性趋势线
【发布时间】:2015-04-16 02:03:43
【问题描述】:

我有一些来自当地溪流的年度峰值流量数据,并想创建洪水频率图表。这是我的数据示例:

#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 函数中的公式更改为指数或多项式函数。

【问题讨论】:

    标签: r plot


    【解决方案1】:

    您可以为此使用predict()

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

    【讨论】:

    • 再次感谢 MrFlick!很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多