Прорисовка Python plt во время цикла for - не работает - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь изобразить простую самоопределяемую sinc функцию, определенную следующим образом (адаптировано из старой статьи Олифанта о Python для научных вычислений):

from math import sin, pi
import NumPy as np 
def sinc(x):
    '''Compute the sinc function: sin(pi*x)/pi*x'''
    try:
        return sin(x)/x
    except ZeroDivisionError:
        return 1.0
    output = [sinc(x) for x in input]

Чтобы построить ее (точка за точкой, перерисовывается / обновляется после каждого вновь вычисленного значения sinc) я пробовал следующий код:

pl = np.zeros(1001)
for x in range(1,1001,1): 
    pl[x]=sinc(x) 
    plt.plot(pl[x],c='blue')
    plt.pause(0.05)
plt.show()

, где plt - это обычно matplotlib.pyplot, pl - это NumPy.Я вижу рамку matplotlib с увеличивающимися осями и пределами осей, но график просто не рисуется / не рисуется / не печатается / не показывается (как на следующем рисунке)

Изображение

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Теперь вы создаете график с одной точкой в ​​каждой итерации. Чтобы увидеть точку добавьте маркер на график (https://matplotlib.org/api/markers_api.html#module-matplotlib.markers).

plt.plot(pl[x],c='blue', marker='o')

Если вы хотите создать график в виде кривой всех точек, вы можете создать график после цикла со списком pl в качестве первого аргумента:

for x in range(1,1001,1): 
    pl[x]=sinc(x) 
plt.plot(pl[x],c='blue')    
plt.show()
0 голосов
/ 14 мая 2018

Я не уверен, в чем ваша проблема, использует ли она plt.plot, а не fig.plot, или строит графики в диапазоне (0, 1000), а не в меньшем, например (0, 2 * pi),Также может быть, что вы плохо инициализируете pl.Может быть, вам нужно установить plt.ion().Мне удалось заставить это работать хотя

import numpy as np
import matplotlib.pyplot as plt

plt.ion()

fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 1000)
y = np.zeros(1000)

for index, xi in enumerate(x):
     y[index] = np.sinc(xi)
     ax.plot(x, y, color='b')
     plt.pause(0.01)

Результат (после ожидания некоторое время)

enter image description here

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