【问题标题】:add a curve that fits the peaks from a plot in R?添加一条适合 R 图中的峰值的曲线?
【发布时间】:2011-09-13 12:56:53
【问题描述】:

如果给定两个向量及其图,是否有一个函数可以添加适合峰值的曲线? 例如,我有:

x= c(0:20)

x [1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

y [1] 19.4 17.9 8.1 11.3 7.8 8.0 5.0 1.7 3.9 5.4 7.5 5.4 4.7 5.0 4.9 3.5 2.9 2.4 1.4 1.7

绘图(x,y,xlim=range(x),ylim=range(y))

最好, 七海

【问题讨论】:

  • 您能解释一下“适合高峰”是什么意思吗?
  • 我的意思是一条跟随值趋势的曲线,但没有考虑到每个值。我试过用黄土做这个 - 但是我得到了一条适合整个日期的曲线,我想考虑最高和最低值。

标签: r vector plot curve


【解决方案1】:

从数学上讲,您的问题定义非常不明确。您为 y 值提供一系列离散值,而不是函数。这意味着它无法区分找到局部最大值。

也就是说,这里有一些代码可以帮助您入门。它使用了一个名为peaks, (attributed to Brian Ripley) 的函数:

peaks<-function(series,span=3){
  z <- embed(series, span)
  s <- span%/%2
  v<- max.col(z) == 1 + s
  result <- c(rep(FALSE,s),v)
  result <- result[1:(length(result)-s)]
  result
} 

x <- c(1:20)
y <- c(19.4, 17.9, 8.1, 11.3, 7.8, 8.0, 5.0, 1.7, 3.9, 
       5.4, 7.5, 5.4, 4.7, 5.0, 4.9, 3.5, 2.9, 2.4, 1.4, 1.7)

plot(x,y, type="l")
p <- which(peaks(y, span=3))

lines(x[p], y[p], col="red", type="b)

问题在于局部峰值的概念定义不明确。你的意思是什么地方?提供的峰值算法允许您修改span。玩一玩,看看有没有用。

【讨论】:

  • 那么,直接使用我提供的函数来计算 y 值会更好吗?例如,如果有: y
  • 除非v 是一个连续函数,否则您仍然会遇到同样的问题。
猜你喜欢
  • 2018-07-23
  • 1970-01-01
  • 2016-09-11
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2022-01-02
相关资源
最近更新 更多