使用for循环在Python中绘图

0 投票
2 回答
10232 浏览
提问于 2025-04-17 16:38

我刚开始学习Python和绘图。我试着用下面的代码生成一个图表,目的是画出Q和F之间的关系图。

from pylab import *

n = 5
D = 13
B = 10

x = linspace(-6.5, 6.5, 1000)
y = 1/sqrt(2*pi)*exp(-(x)**2/2)

for i in range(1,n):
    F = sum(y*cos(2*pi*i*x/D)*exp(-i**2*B/(4*D**2)))
    print F

for j in range(1,n):
    Q = 2*pi*(j)/D
    print Q

plt.plot(Q,F,'rx')
plt.show()

但是当我运行这段代码时,它只画出了一个数据点,而不是所有的数据。我觉得我肯定犯了什么低级错误。有没有人能帮我一下?谢谢!

2 个回答

1

你在循环里只是把 Q 和 F 设成一样的。

from pylab import *

n = 5
D = 13
B = 10

x = linspace(-6.5, 6.5, 1000)
y = 1/sqrt(2*pi)*exp(-(x)**2/2)

for i in range(1,n):
    F.append(sum(y*cos(2*pi*i*x/D)*exp(-i**2*B/(4*D**2))))
    print F
    Q.append(2*pi*(j)/D)
    print Q

plt.plot(Q,F, 'rx')    
plt.show()
2

这是因为你在每次循环中把 F 和 Q 设置为一个值,而不是把这个值加到一个数组的末尾。

from pylab import *

n = 5
D = 13
B = 10

x = linspace(-6.5, 6.5, 1000)
y = 1/sqrt(2*pi)*exp(-(x)**2/2)

F,Q = [],[]

for i in range(1,n):
    F.append(sum(y*cos(2*pi*i*x/D)*exp(-i**2*B/(4*D**2))))
    Q.append(2*pi*(j)/D)

plt.plot(Q,F,'rx')
plt.show()

撰写回答