Python 如何绘制y=x+;i代表i=[1: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') 当您将所有答案

我应该得到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的大小固定为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
。否则,您将尝试将值附加到尚未定义的列表中。是的,您是对的。我的意思是说这部分代码应该被替换(这部分上面的行应该保持不变)