2012-01-23 11 views
7

私はこの曲線に特定のピークが含まれている - これらのピークの数を取得する方法を知りたい。グラフのピーク数を数えるには? -Graph analysis-

サンプルデータ:

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値です。

このグラフのピーク数を教えてくれるマクロや数式を書きたいと思います。

注:このグラフは実際にはpllotされており、matlabからエクスポートされていますので、私のコードでmatlabから私のために行うことができる方法があれば、それも素晴らしいでしょう!

+0

かなりの数のMatlabのピーク検出器があり、(HTTP [Mathworks社は、Exchangeファイル]を参照してください。//www.mathworks .com/matlabcentral/fileexchange /?term = peak) –

答えて

8

あなたのデータはA1:B36にあったならば、この式 =SUMPRODUCT(--(B2:B35>B1:B34),--(B2:B35>B3:B36))
リターン11のピーク

  • B2B1とB3よりも高い場合にはそのピークとして、それを数える場合には、チェック
  • の場合、B3B2および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 
+2

+1驚くほど簡単な答えの名誉です。 –

+0

驚くべき答え、本当に感謝していますが、あなたの例でもピークを指すグラフを持つことは可能ですか? – Zalaboza

+1

@MomenMElZalabany done、サンプルコードを参照してください:)。 Thx Rachel – brettdj

関連する問題