我想用 Excel 在一个巨大的数据集中找到一个局部最大值,我一直在尝试的方法是比较前一个和下一个值以确保它们更小,例如:
=IF(AND(C4>C3,C4>C5),"Local maxima","")
Run Code Online (Sandbox Code Playgroud)
但是这个公式的问题在于,如果峰值跨越多行,它不会将其作为局部最大值捕捉到。尽管事实上它是一个局部最大值,因为值开始下降。
(如果你想知道为什么要在一组频谱数据中找到局部最大值)
你走在正确的轨道上!您可以使用几个辅助列来完成此操作。请参见下图。
第一个辅助列“slope”使用 Excel 的 SLOPE 函数。它计算两个相邻点之间的斜率。
第二个辅助列“用于标签”,检查从正斜率到负斜率的转换。从正斜率到负斜率的转变被标记为“最大”。
然后,您可以使用如下宏来用这些最大值标记图形:
Sub CustomLabels()
Dim i, myCount, pt
ActiveSheet.ChartObjects("myChart").Activate
myCount = ActiveChart.SeriesCollection(1).Points.Count
For i = 1 To myCount
ActiveChart.SeriesCollection(1).Points(i).ApplyDataLabels
ActiveChart.SeriesCollection(1).Points(i).DataLabel.Text = Range("D" & i + 1).Value
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
62027 次 |
| 最近记录: |