2012-01-23 8 views
7

Mam tę krzywą, która zawiera pewne szczyty - chcę wiedzieć, jak uzyskać liczbę tych szczytów.Jak liczyć liczbę pików na wykresie? -graph analysis-

próbki danych:

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 

Kolumna 1 oznacza wartości X, 2. kolumna wartości y.

Chcę napisać makro lub formułę, które powiedzą mi, ile szczytów na tym wykresie.

Uwaga: ten wykres jest faktycznie wykreślony i wyeksportowany z Matlab, więc jeśli istnieje sposób, w jaki mogę powiedzieć mój kod, aby zrobił to dla mnie z Matlaba, byłoby również świetne!

+0

Istnieje sporo detektory szczytowe Matlab, patrz [Mathworks pliku wymiany] (http: //www.mathworks .com/matlabcentral/fileexchange /? term = peak) –

Odpowiedz

8

jeśli dane było w A1:B36 wtedy ta formuła =SUMPRODUCT(--(B2:B35>B1:B34),--(B2:B35>B3:B36))
powraca 11 szczytów

Sprawdza czy

  • B2 jest wyższa niż B1 i B3, jeśli tak liczy się to jako szczyt
  • następnie jeśli B3 jest wyższa niż B2 i B4, jeśli tak, liczy się jako szczyt i tak na

enter image description here

[Aktualizacja: prośba VBA dodane]

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 
+2

+1 Kudos za niesamowicie prostą odpowiedź. –

+0

Zdumiewająca odpowiedź, naprawdę to doceniam, ale czy możliwe jest, aby wykres wskazywał na wartości szczytowe, tak jak w twoim przykładzie? – Zalaboza

+1

@MomenMElZalabany zrobić, patrz przykładowy kod :). Thx Rachel – brettdj