如何计算图中的峰数?图分析 -

Zal*_*oza 7 excel vba excel-vba excel-formula

我有这条曲线包含某些峰值 - 我想知道如何获得这些峰值的数量.

样本数据:

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
Run Code Online (Sandbox Code Playgroud)

第1列是X值,第2列是y值.

我想写一个宏或公式,告诉我这个图中有多少个峰值.

注意:这个图是实际绘制并从matlab导出的,所以如果有一种方法我可以告诉我的代码从matlab为我做这个也很棒!

bre*_*tdj 8

如果你的数据在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
Run Code Online (Sandbox Code Playgroud)