如何统计图中峰的数量? -graph分析 –

我有这条包含某些峰的曲线 – 我想知道如何得到这些峰的数量。

样本数据:

0.10 76792 0.15 35578 0.20 44675 0.25 52723 0.30 27099 0.35 113931 0.40 111043 0.45 34312 0.50 101947 0.55 100824 0.60 20546 0.65 114430 0.70 113764 0.75 15713 0.80 83133 0.85 79754 0.90 17420 0.95 121094 1.00 117346 1.05 22841 1.10 95095 1.15 94999 1.20 18986 1.25 111226 1.30 106640 1.35 34781 1.40 66356 1.45 68706 1.50 21247 1.55 117604 1.60 114268 1.65 26292 1.70 88486 1.75 89841 1.80 49863 1.85 111938 

第一列是X值,第二列是Y值。

我想写一个macros或公式,告诉我在这个图中有多less个峰。

注意:这个graphics是从matlab实际绘制出来的,所以如果有一种方法我可以告诉我的代码从matlab中为我完成,那也是很棒的!

如果您的数据在A1:B36则此公式=SUMPRODUCT(--(B2:B35>B1:B34),--(B2:B35>B3:B36))
返回11个峰值

它检查是否

  • B2高于B1和B3,如果这样算作峰值
  • 那么如果B3高于B2B4 ,如果这样就把它算作一个高峰,依此类推

在这里输入图像说明

[更新:添加了VBA请求]

 Sub GetMax() Dim chr As ChartObject Dim chrSeries As Series Dim lngrow As Long On Error Resume Next Set chr = ActiveSheet.ChartObjects(1) Set chrSeries = chr.Chart.SeriesCollection(1) On Error GoTo 0 If chrSeries Is Nothing Then Exit Sub For lngrow = 2 To UBound(chrSeries.Values) - 1 If chrSeries.Values(lngrow) > chrSeries.Values(lngrow - 1) Then If chrSeries.Values(lngrow) > chrSeries.Values(lngrow + 1) Then chrSeries.Points(lngrow).ApplyDataLabels With chrSeries.Points(lngrow).DataLabel .Position = xlLabelPositionCenter .Border.Color = 1 End With End If End If Next End Sub