如何在Python中使用datetime和scipy峰值进行绘图?

如何在Python中使用datetime和scipy峰值进行绘图?,python,pandas,matplotlib,plot,scipy,Python,Pandas,Matplotlib,Plot,Scipy,我从一个问题中选取了一个例子,并将其应用于我的数据集,但当涉及到绘图时,我陷入了困境。我知道如何绘制日期-时间+值图,但我不知道如何组合 我得到的答复如下: 该示例具有以下代码: 示例代码: import numpy as np import matplotlib.pyplot as plt from scipy.signal import find_peaks np.random.seed(42) # borrowed from @Majid Mo

我从一个问题中选取了一个例子,并将其应用于我的数据集,但当涉及到绘图时,我陷入了困境。我知道如何绘制日期-时间+值图,但我不知道如何组合

我得到的答复如下:

该示例具有以下代码:
示例代码:

import numpy as np                    
import matplotlib.pyplot as plt
from scipy.signal import find_peaks 

np.random.seed(42)

# borrowed from @Majid Mortazavi's answer
random_number1 = np.random.randint(0, 200, 20)
random_number2 = np.random.randint(0, 20, 100)
random_number = np.concatenate((random_number1, random_number2))
np.random.shuffle(random_number)

peaks, _ = find_peaks(random_number, height=100)

plt.plot(random_number)
plt.plot(peaks, random_number[peaks], "x")
plt.show()
peaks, _ = find_peaks(my_dataset['quality'], height=500)

plt.figure(figsize=(14,12))
x = my_dataset.index
y = my_dataset.quality
plt.scatter(x, y, s=1,c='b',label='quality')
plt.plot(peaks, my_dataset['quality'][peaks], "x")

plt.xlabel('datetime')
plt.ylabel('values')
plt.legend(loc='best')
plt.title('Qualities')
plt.show()
plt.figure(figsize=(14,12))
x = my_dataset.index
y = my_dataset.quality
plt.scatter(x, y, s=1,c='b',label='quality')

plt.xlabel('datetime')
plt.ylabel('values')
plt.legend(loc='best')
plt.title('Qualities')
plt.show()
我将其改编为我的real values数据集,我有以下代码:
改编代码:

import numpy as np                    
import matplotlib.pyplot as plt
from scipy.signal import find_peaks 

np.random.seed(42)

# borrowed from @Majid Mortazavi's answer
random_number1 = np.random.randint(0, 200, 20)
random_number2 = np.random.randint(0, 20, 100)
random_number = np.concatenate((random_number1, random_number2))
np.random.shuffle(random_number)

peaks, _ = find_peaks(random_number, height=100)

plt.plot(random_number)
plt.plot(peaks, random_number[peaks], "x")
plt.show()
peaks, _ = find_peaks(my_dataset['quality'], height=500)

plt.figure(figsize=(14,12))
x = my_dataset.index
y = my_dataset.quality
plt.scatter(x, y, s=1,c='b',label='quality')
plt.plot(peaks, my_dataset['quality'][peaks], "x")

plt.xlabel('datetime')
plt.ylabel('values')
plt.legend(loc='best')
plt.title('Qualities')
plt.show()
plt.figure(figsize=(14,12))
x = my_dataset.index
y = my_dataset.quality
plt.scatter(x, y, s=1,c='b',label='quality')

plt.xlabel('datetime')
plt.ylabel('values')
plt.legend(loc='best')
plt.title('Qualities')
plt.show()
最初,我的绘图代码是这样的,它起作用了:
初始代码:

import numpy as np                    
import matplotlib.pyplot as plt
from scipy.signal import find_peaks 

np.random.seed(42)

# borrowed from @Majid Mortazavi's answer
random_number1 = np.random.randint(0, 200, 20)
random_number2 = np.random.randint(0, 20, 100)
random_number = np.concatenate((random_number1, random_number2))
np.random.shuffle(random_number)

peaks, _ = find_peaks(random_number, height=100)

plt.plot(random_number)
plt.plot(peaks, random_number[peaks], "x")
plt.show()
peaks, _ = find_peaks(my_dataset['quality'], height=500)

plt.figure(figsize=(14,12))
x = my_dataset.index
y = my_dataset.quality
plt.scatter(x, y, s=1,c='b',label='quality')
plt.plot(peaks, my_dataset['quality'][peaks], "x")

plt.xlabel('datetime')
plt.ylabel('values')
plt.legend(loc='best')
plt.title('Qualities')
plt.show()
plt.figure(figsize=(14,12))
x = my_dataset.index
y = my_dataset.quality
plt.scatter(x, y, s=1,c='b',label='quality')

plt.xlabel('datetime')
plt.ylabel('values')
plt.legend(loc='best')
plt.title('Qualities')
plt.show()
但我需要有相同的图,但是在计算出的峰值上有“X”符号

所以最终的结果应该是这样的:(我在画图中编辑了最初的绘图,以获得最终结果的视觉效果)

老实说,我不知道如何使它工作。你能帮帮我吗

我非常感谢任何帮助我的努力!!!非常感谢您的支持

截至scipy.signal.find_peaks的报告:

返回峰值ndarray
x中满足所有给定条件的峰值指数

您的
peaks
变量是峰值的索引数组。因此,为了访问这些峰值的x和y坐标,您应该替换:

plt.scatter(x, y, s=1,c='b',label='quality')
plt.plot(peaks, my_dataset['quality'][peaks], "x")