Как вы строите пики на графике в Python? - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь добавить пики графика в массив и нанести их на мою фигуру. Вот мой код:

import matplotlib.pyplot as plt
import numpy as np


t,x,y = np.loadtxt(r"C:\Users\haako\Documents\NTNU\Fysikk\Python\film2.txt", delimiter='    ', unpack=True)

plt.plot(t,x)
plt.xlabel("t-value")
plt.ylabel("x-value")
plt.show()

Picture of the graph

1 Ответ

1 голос
/ 18 марта 2019

Вы просто берете производную. Здесь я взял несколько градиентов, чтобы убедиться, что точка, которую мы находим, находится сверху, а не просто случайность:

import math
import matplotlib.pyplot as plt

x_array = []
y_array = []

for num in range(0, 10000):
    x = num/100
    y = math.sin(x) * (.99 ** x)
    x_array.append(x)
    y_array.append(y)

x_maximums = []
y_maximums = []

for i in range(2, len(y_array) - 2):
    if y_array[i - 2] < y_array[i - 1] and y_array[i - 1] < y_array[i] and y_array[i + 2] < y_array[i + 1] and y_array[i + 1] < y_array[i]:
        y_maximums.append(y_array[i])
        x_maximums.append(x_array[i])


plt.plot(x_array, y_array)
plt.scatter(x_maximums, y_maximums, color='k')
plt.show()

Выходы: Plot with peaks shown ПРИМЕЧАНИЕ Излишние производные, которые я использовал, не нужны для моего поста. Я включил их, потому что возможно, что ваш набор данных имеет небольшие различия между числами, которые неправильно пометили бы некоторые из них как локальный максимум, если бы вы сравнивали только два ближайших числа (общее в экспериментальных данных). В качестве альтернативы можно взять производные, такие как:

if y_array[i - 2] < y_array[i] and y_array[i - 1] < y_array[i] and y_array[i + 2] < y_array[i] and y_array[i + 1] < y_array[i]:

Если это имеет больше смысла для вас, или, может быть, даже как-то иначе, если вы все еще получаете странные результаты!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...