2012-01-23 2 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 값이다.

그래프에 몇 개의 피크가 있는지 알려주는 매크로 또는 수식을 쓰고 싶습니다.

참고 :이 그래프는 실제로 plot되고 matlab에서 내보내 지므로 matlab에서 나를 위해 코드를 수행 할 수있는 방법이 있다면 위대 할 수도 있습니다.

+0

적지 MATLAB 피크 검출기가있다 [업데이트 VBA 요청은 추가]를 (HTTP [매스 웍스의 Exchange 파일] 참조 : //www.mathworks를 .com/matlabcentral/fileexchange /? term = peak) –

답변

8

데이터는 A1:B36에 있었던 경우,이 식 =SUMPRODUCT(--(B2:B35>B1:B34),--(B2:B35>B3:B36))
반환 11 개 피크

  • B2B1 및 B3보다 높으면 때문에 피크로 간주한다면이 검사
  • 이면 B3B2B4보다 큰 경우 최대 값으로 계산하므로

enter image description here

:

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 완료, 샘플 코드 참조). Thx Rachel – brettdj

관련 문제