如何统计图中峰的数量? -graph分析 –
我有这条包含某些峰的曲线 – 我想知道如何得到这些峰的数量。
样本数据:
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值。
我想写一个macros或公式,告诉我在这个图中有多less个峰。
注意:这个graphics是从matlab实际绘制出来的,所以如果有一种方法我可以告诉我的代码从matlab中为我完成,那也是很棒的!
如果您的数据在A1:B36
则此公式=SUMPRODUCT(--(B2:B35>B1:B34),--(B2:B35>B3:B36))
返回11个峰值
它检查是否
-
B2
高于B1
和B3,如果这样算作峰值 - 那么如果
B3
高于B2
和B4
,如果这样就把它算作一个高峰,依此类推
[更新:添加了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