Python 如何绘制y=x+;i代表i=[1:16]?
我应该得到16条单独的线路,但第一条线路的终点会返回轨道,并与下一条线路的起点相交。我该如何解决这个问题Python 如何绘制y=x+;i代表i=[1:16]?,python,arrays,matplotlib,Python,Arrays,Matplotlib,我应该得到16条单独的线路,但第一条线路的终点会返回轨道,并与下一条线路的起点相交。我该如何解决这个问题 a = [] b = [] x = 0 for i in range(1,17): for x in range(0,5): y=x+i a.append(x) b.append(y) fig= plt.figure() axes=fig.add_subplot(111) pylab.plot(a, b, '-b') 当您将所有答案
a = []
b = []
x = 0
for i in range(1,17):
for x in range(0,5):
y=x+i
a.append(x)
b.append(y)
fig= plt.figure()
axes=fig.add_subplot(111)
pylab.plot(a, b, '-b')
当您将所有答案添加到一个列表中时,它假定所有行都已连接。您可以尝试将a和b的大小固定为5,然后在每次传递内部for循环后绘制16行中的每一行
for i in range(1,17):
for x in range(0,5):
y=x+i
a.append(x)
b.append(y)
pylab.plot(a, b, '-b')
a=[]
b=[]
fig= plt.figure()
axes=fig.add_subplot(111)
pylab.show()
问题是您试图绘制16行,但将它们全部添加到一个列表中。解决方案是每次初始化空列表,并在for循环中打印它们,以便将每个列表打印为一行 在这种情况下,您应该在for循环之外只定义一次图形 在下面的回答中,我正在移除您不需要的东西。例如,
x=0
和axes=fig.add_子批次(111)
。我将用另一个变体替换此命令
完整的工作答案:
import matplotib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,6))
for i in range(1,17):
a = []
b = []
for x in range(0,5):
y=x+i
a.append(x)
b.append(y)
plt.plot(a, b, '-b')
plt.show()
更简单的版本
通过将numpy数组用作
import numpy as np
import matplotib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,6))
a = np.arange(5)
for i in range(1,17):
plt.plot(a, a+i, '-b')
plt.show()
由于
x
值始终相同,因此可以将它们作为1D数组传递,将y
值作为2D数组传递<代码>matplotlib将自动处理着色:
x = np.linspace(0,5,10)
y0 = i0 = np.arange(17)
y = y0[:,None]+x
plt.plot(x,y.T)
plt.show()
给出此图像:
我认为您需要在第二个循环之前初始化
a
和b
。否则,您将尝试将值附加到尚未定义的列表中。是的,您是对的。我的意思是说这部分代码应该被替换(这部分上面的行应该保持不变)