Как посчитать количество пиков в графике?-граф анализа- - PullRequest
7 голосов
/ 24 января 2012

У меня есть эта кривая, которая содержит определенные пики - я хочу знать, как получить количество этих пиков.

Пример данных:

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

1-й столбец - это значения X, 2-й столбец - это значения y.

Я хочу написать макрос или формулу, которая скажет мне, сколько пиков на этом графике.

Примечание: этот график фактически построен и экспортирован из matlab, поэтому, если есть способ, я могускажи мой код, чтобы сделать это для меня из Matlab, это было бы также здорово!

1 Ответ

8 голосов
/ 24 января 2012

если ваши данные были в A1:B36, тогда эта формула =SUMPRODUCT(--(B2:B35>B1:B34),--(B2:B35>B3:B36))
возвращает 11 пиков

Проверяется, превышает ли

  • B2 значение B1и B3, если это так, считается как пик
  • , тогда, если B3 выше, чем B2 и B4, если это так, он считается как пик и так далее

enter image description here

[Обновлено: добавлен запрос 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...