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

样本数据:

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值。

我想编写一个宏或公式来告诉我该图中有多少个峰。

注意:此图实际上是从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

关于excel - 如何计算图中的峰数? -图分析-,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8979752/

10-13 07:13