如何使用 Python 绘制所有峰值

Posted

技术标签:

【中文标题】如何使用 Python 绘制所有峰值【英文标题】:How to plot all peaks using Python 【发布时间】:2017-11-14 02:52:44 【问题描述】:

我正在使用 peakutils Python 包来检测我的数据中的峰值(estimated.csv 的第二列 - 找到 here(点击链接)。

这是我找到峰值的代码:

#/usr/bin/python -tt

import pandas as pd
import peakutils

estimated_data = pd.read_csv("estimated.csv", header=None)
col2 = estimated_data[:][1] # Second column data
print(col2[:]) # Print all the rows
index = peakutils.indexes(col2, thres=0.4, min_dist=1000)
print(index) 

峰值检测工作正常。我想绘制所有检测到的峰值,就像在下面的教程中一样。

https://plot.ly/python/peak-finding/

但似乎plotly 似乎无法离线工作。使用Python 包如matplotlib 是否有不同的方法?

【问题讨论】:

我想你知道请求图书馆是题外话?!如果您想询问有关 plot.ly 的问题,请先阅读 this question 然后改写您的问题。如果您想询问有关仅使用 matplotlib 进行绘图的问题,请改写您的问题以询问您使用 matplotlib 时遇到的问题。决定一种特定的方式。如果您想同时探索这两种方式,请提出两个不同的问题。 我今天早上确实看到了这个问题,但对我的帮助不大。我会考虑使用matplotlib 正如我所说,您应该改写问题以专门询问有关 matplotlib 的问题,然后删除 plotly 错误消息。 好的,完成了! 【参考方案1】:

可以通过使用带有标记的绘图来使用 matplotlib 绘制峰值。数据按从 peakutils 函数中找到的索引进行索引。

import pandas as pd
import peakutils
import matplotlib.pyplot as plt

estimated_data = pd.read_csv("data/estimated.csv", header=None)
col1 = estimated_data[:][0] # First column data
col2 = estimated_data[:][1] # Second column data

index = peakutils.indexes(col2, thres=0.4, min_dist=1000)

plt.plot(col1,col2, lw=0.4, alpha=0.4 )
plt.plot(col1[index],col2[index], marker="o", ls="", ms=3 )

plt.show()

为了用一条线连接峰(如 cmets 中所要求的),on 将简单地省略 ls=""

plt.plot(col1[index],col2[index], marker="o", ms=3 )

【讨论】:

谢谢。这几乎就像一个指数平滑。有没有办法连接这些点(峰)并形成一条线? 如果我们想将峰值坐标(两列的xy)保存到另一个文件中呢? 你可以使用numpy.savetxt将一个numpy数组保存到一个文件中。 我做了np.savetxt('peak_data.csv', np.vstack((col1,col2)).T, delimiter=',') - 但它保存了所有数据。如果我们使用index,它将打印行号。 我没有发现问题。它会保存您提供给它的数据。

以上是关于如何使用 Python 绘制所有峰值的主要内容,如果未能解决你的问题,请参考以下文章

如何获得python脚本的峰值内存使用量?

如何提取图中所有包含曲线的峰的斜率?

如何估计密度函数并计算其峰值?

如何估计密度函数并计算其峰值?

如何计算给定会话日志的峰值并发用户

如何使用 Python 在一组点上绘制多边形(部分向内弯曲)边缘?