从Python中for循环中生成的二维值创建绘图

从Python中for循环中生成的二维值创建绘图,python,for-loop,matplotlib,plot,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 +=

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

您需要指定一个格式字符串。试着替换

pl.plot(x,y)


或者在

中记录的任何其他类型的格式,您需要指定一个格式字符串。试着替换

pl.plot(x,y)


或者在

中记录的任何其他类型的格式,您需要指定一个格式字符串。试着替换

pl.plot(x,y)


或者在

中记录的任何其他类型的格式,您需要指定一个格式字符串。试着替换

pl.plot(x,y)

或者在

中记录的任何其他类型的格式,您正试图为每个随机点绘制一条线:图形为空白,因为每个点都没有连接到任何其他点。您可以尝试构建一个点列表,并将该列表绘制为折线图:

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

您正试图为每个随机点绘制一条线:图形为空,因为每个点都没有连接到其他任何点。您可以尝试构建一个点列表,并将该列表绘制为折线图:

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

您正试图为每个随机点绘制一条线:图形为空,因为每个点都没有连接到其他任何点。您可以尝试构建一个点列表,并将该列表绘制为折线图:

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

您正试图为每个随机点绘制一条线:图形为空,因为每个点都没有连接到其他任何点。您可以尝试构建一个点列表,并将该列表绘制为折线图:

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()
问题是

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
时的一个非常强大的约定,为了代码清晰起见,遵循它是一个好主意。

问题在于

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
时的一个非常强大的约定,为了代码清晰起见,遵循它是一个好主意。

问题在于

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
时的一个非常强大的约定,为了代码清晰起见,遵循它是一个好主意。

问题在于

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
时,这是一个非常强大的约定,为了代码清晰起见,遵循它是一个好主意