【问题标题】:Matplotlib set_data xdata and ydata must be same length error [closed]Matplotlib set_data xdata 和 ydata 必须相同长度错误 [关闭]
【发布时间】:2018-06-01 01:01:07
【问题描述】:

我有一个简单的matplotlibchart,我想通过函数添加点。似乎当我扩展存储 x 和 y 值的数组时,尽管两个数组都是 6 个值,但我收到错误 RuntimeError: xdata and ydata must be the same length

import matplotlib.pyplot as plt
import numpy as np
import time

x = np.array([1, 2, 3])
y = np.array([1, 7, 5])

plt.ion()

fig = plt.figure()
ax = fig.add_subplot(111)
line1, = ax.plot(x, y, 'r-')
plt.show()


def update_points(new_x, new_y):
    global x, y, fig, line1, ax
    time.sleep(2)
    x = np.append(x, new_x)
    y = np.append(y, new_y)
    line1.set_xdata(x)
    line1.set_xdata(y)
    ax.relim()
    ax.autoscale_view()
    fig.canvas.draw()


update_points(np.array([4, 5, 6]), np.array([4, 5, 3]))

【问题讨论】:

  • 你有一个错字:line1.set_xdata(y) 应该改为 line1.set_ydata(y)

标签: python python-2.7 numpy matplotlib


【解决方案1】:

我知道这是一篇旧帖子,但是对于仍在登陆此问题的任何人,有两种解决方案。

第一个解决方案是Aakash Verma 写的in their solution,即用简单的line1.set_data(x,y) 替换line1.set_xdata(x)line1.set_xdata(y),这将保持xdataydata 的长度相同,假设输入x 和 y 的长度相同。

第二种解决方案是注意到user2242044 只是打错了字,两次写set_xdata,而第二次应该是set_ydata。这就是导致RuntimeError: xdata and ydata must be the same length(或者,对于我使用Python 3,ValueError: shape mismatch: objects cannot be broadcast to a single shape)的原因,因为程序两次添加到xdata,而没有匹配的ydata 进行绘图。

【讨论】:

    【解决方案2】:

    之所以如此,是因为您最初已经使用引用变量line1 创建了一个图表。因此,当您执行您创建的函数时,第一次说,您已经有了一个绘图,因此一次只更改一个轴会变得错误

    所以这是错误的

    line1.set_xdata(x) line1.set_xdata(y)

    改成

    line1.set_data(x,y)

    如果您已经绘制了绘图,请使用plt.draw() 重新绘制以查看更改。

    【讨论】:

    • 谢谢。这行得通,但它似乎仍然需要fig.canvas.draw() 而不是plt.draw()
    • 是的,因为在这里,您是第一次绘制它。我说'如果'你已经画了它,你会想要重画等等这个命令。
    • 知道了,所以如果我多次调用它,有没有办法检查绘图是否已经绘制并调用plt.draw() 而不是第二次调用?
    • 为什么要检查?只需执行 plt.draw() 或 fig.canvas.draw() 即可查看更改。两者表现相同。
    • 好的,我认为 plt.draw() 可能更适合仍然使用 fig.canvas.draw()
    猜你喜欢
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    相关资源
    最近更新 更多