【问题标题】:How do I plot y=x+i for i = [1:16]?对于 i = [1:16],如何绘制 y=x+i?
【发布时间】:2019-02-17 00:15:50
【问题描述】:

我应该得到 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')

【问题讨论】:

    标签: python arrays matplotlib


    【解决方案1】:

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

    在这种情况下,您应该在 for 循环之外只定义一次图形。

    在下面的答案中,我正在删除您不需要的东西。例如。 x=0axes=fig.add_subplot(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()
    

    【讨论】:

      【解决方案2】:

      由于您的x 值始终相同,因此您可以将它们作为一维数组传递,将您的y 值作为二维数组传递。然后matplotlib 会自动处理颜色:

      x = np.linspace(0,5,10)
      y0 = i0 = np.arange(17)
      y = y0[:,None]+x
      plt.plot(x,y.T)
      plt.show()
      

      给出这张图片:

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我认为您需要在第二个循环之前初始化ab。否则,您会尝试将您的值附加到您尚未定义的列表中。
        • 是的,你是对的。我的意思是说这部分代码应该被替换(这部分上面的行应该保持不变。)
        猜你喜欢
        • 2012-11-23
        • 2017-01-01
        • 1970-01-01
        • 2013-02-01
        • 1970-01-01
        • 2014-10-23
        • 1970-01-01
        • 2015-05-24
        • 1970-01-01
        相关资源
        最近更新 更多