在for循环中Python绘制plt - 不工作

时间:2018-05-14 10:00:51

标签: python matplotlib plot

我试图绘制一个简单的自定义sinc函数,定义如下(改编自Oliphant关于Python for Scientific Computing的旧论文):

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.pyplotplNumPy。我可以看到matplotlib框架的轴和轴限制增加但是图表根本没有绘制/绘制/打印/显示(如下图所示)

Image

2 个答案:

答案 0 :(得分:0)

我不确定你的问题是什么,无论是使用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

答案 1 :(得分:0)

现在,您要在每次迭代中创建一个包含单个点的图。要查看点添加,请在图中添加标记(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()