我的曲线包含某些峰值 - 我想知道如何获得这些峰值的数量。
示例数据:
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中为我做这个也很棒!
答案 0 :(得分:8)
如果您的数据位于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