如何针对i = [1:16]绘制y = x + i?

时间:2019-02-17 00:15:51

标签: 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')

3 个答案:

答案 0 :(得分:1)

问题是您试图绘制16条线,但是将它们全部添加到一个列表中。解决方案是每次初始化空列表,然后在for循环中的内部中绘制空列表,以便将每个列表绘制为单行。

在这种情况下,您只能在for循环外仅定义一次该数字

在下面的答案中,我正在删除您不需要的东西。对于前。 23:59x=0。我正在用另一个变体替换此命令。



完整的工作答案:

axes=fig.add_subplot(111)

enter image description here

简单版本

您可以通过使用numpy数组来简化整个代码

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

答案 1 :(得分:1)

由于您的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()

提供此图片:

result of above code

答案 2 :(得分:0)

在将所有答案附加到一个列表中时,它假定所有线路都已连接。您可以尝试将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()