【问题标题】:Plotting a list of (x, y) coordinates in python matplotlib在 python matplotlib 中绘制 (x, y) 坐标列表
【发布时间】:2014-02-26 10:59:03
【问题描述】:

我有一个对 (a, b) 的列表,我想在 python 中使用 matplotlib 作为实际的 x-y 坐标进行绘制。目前,它正在制作两个图,其中列表的索引给出 x 坐标,第一个图的 y 值是成对中的 as,第二个图的 y 值是成对中的 bs .

澄清一下,我的数据如下所示:li = [(a,b), (c,d), ... , (t, u)] 我想做一个只调用plt.plot() 不正确的单行代码。 如果我不需要单线,我可以轻松做到:

xs = [x[0] for x in li]
ys = [x[1] for x in li]
plt.plot(xs, ys)

如何让 matplotlib 将这些对绘制为 x-y 坐标?

【问题讨论】:

    标签: python matplotlib plot coordinates


    【解决方案1】:

    根据this example

    import numpy as np
    import matplotlib.pyplot as plt
    
    N = 50
    x = np.random.rand(N)
    y = np.random.rand(N)
    
    plt.scatter(x, y)
    plt.show()
    

    将产生:

    要将您的数据从对解压到列表中,请使用zip

    x, y = zip(*li)
    

    所以,单线:

    plt.scatter(*zip(*li))
    

    【讨论】:

    • 对于一个 2 列的 numpy 数组,plt.scatter( * xy.T ) 有效:对于 x, y = xy.T; plt.scatter( x, y ) 来说,简短而晦涩
    • x, y = zip(*li) 真是优雅的python代码!我一直在做更直接的两行代码,每行都有一个列表压缩(就像原始问题一样)
    • 随机plt.scatter 示例与问题的关系有点令人困惑。
    【解决方案2】:

    如果你有一个 numpy 数组,你可以这样做:

    import numpy as np
    from matplotlib import pyplot as plt
    
    data = np.array([
        [1, 2],
        [2, 3],
        [3, 6],
    ])
    x, y = data.T
    plt.scatter(x,y)
    plt.show()
    

    【讨论】:

    • 因此没有办法拥有data=np.array([[x1,y1],[x2,y2],etc.])np.array 并使用plt.plot(data)。我总是要给出两个数组而不是数组数组?
    • @MaxCoplan,没错,但你可以使用plt.plot(*data.T),它的作用与上述相同,但会跳过中间步骤。
    【解决方案3】:

    如果你想绘制一条连接列表中所有点的单线

    plt.plot(li[:])
    
    plt.show()
    

    这将绘制一条连接列表中所有对的线,作为笛卡尔平面上从列表开始到结尾的点。 我希望这是你想要的。

    【讨论】:

    • 他不想绘制单行,他想用“单行”(单行代码)进行绘制。他正在寻找的答案(并在 3 年前得到)是使用 scatter()
    • 既然这个答案说明了它的工作条件,即“如果你想绘制一条连接列表中所有点的线”,它真的值得投反对票吗?
    • @Gathide:是的,它值得一票否决,因为它根本不起作用,也不符合描述。 plt.plot(li) 就像 plt.plot(li[:])。它只是绘制 2 条线,将它们用作 (y1, y2) 而不是 (x1, y1)
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 2020-07-25
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2021-03-07
    相关资源
    最近更新 更多