我正在创建一个在for循环中生成的(x,y)坐标的轨迹。但情节突然出现,它是空白的。有人可以帮助淘汰吗?
import random
import math
import matplotlib.pyplot as pl
x = 0
y = 0
dx = 0
dy = 0
v = 2
n=100
pl.figure()
pl.hold(True)
for i in range(1,n):
dx = random.uniform(-2,2)
x = x+dx
y += ((v**2 - dx**2)**(0.5))*(random.randint(-1,1))
pl.plot(x,y)
print(x,y)
pl.show()
答案 0 :(得分:2)
您正在尝试为每个随机点绘制线:图表为空,因为每个点都没有连接到任何其他点。您可以尝试构建点列表并将该列表绘制为折线图:
xarr, yarr = [], []
for i in range(1,n):
dx = random.uniform(-2,2)
x = x+dx
y += ((v**2 - dx**2)**(0.5))*(random.randint(-1,1))
xarr.append(x)
yarr.append(y)
pl.plot(xarr,yarr)
pl.show()
答案 1 :(得分:1)
问题在于
pl.plot(x,y)
绘制默认样式,即不绘制各个点,但只绘制点之间的线。由于您一次只绘制一个点,因此没有任何内容出现。你可以用它们出现的方式绘制点:
pl.plot(x,y,'ko')
这意味着您没有看到序列,只看到了各个点。更好的解决方案是跟踪点,然后立即绘制所有点:
import random
import math
import matplotlib.pyplot as plt
x = 0
y = 0
dx = 0
dy = 0
v = 2
n=100
plt.figure()
xs = []
ys = []
for i in range(1,n):
dx = random.uniform(-2,2)
x = x+dx
y += ((v**2 - dx**2)**(0.5))*(random.randint(-1,1))
xs.append(x)
ys.append(y)
plt.plot(xs,ys)
plt.show()
请注意,您不再需要plt.hold(True)
,因为您只拨打了一次plt.plot()
另请注意,我在第二个示例中已将pl
更改为plt
,因为在使用matplotlib
时这是一个非常强大的惯例,并且最好遵循它,代码清晰度。
答案 2 :(得分:0)
您需要指定格式字符串。尝试替换
pl.plot(x,y)
与
pl.plot(x,y,'r+')
或http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot
中记录的任何其他格式