从Python中的for循环中生成的2-D值创建绘图

时间:2015-06-04 13:08:29

标签: python for-loop matplotlib plot

我正在创建一个在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()

3 个答案:

答案 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()

enter image description here

答案 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

中记录的任何其他格式