numpy Matplotlib set_data xdata和ydata必须相同长度错误[已关闭]

gjmwrych  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(116)

**已关闭。**此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
两年前关闭。
Improve this question
我有一个简单的matplotlib图表,我想通过一个函数添加点。看起来当我扩展数组存储x和y值时,我得到错误RuntimeError: xdata and ydata must be the same length,尽管两个数组都是6个值。

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

字符串

brc7rcf0

brc7rcf01#

这是因为您最初已经创建了一个带有引用变量line1的图。因此,当你第一次执行你创建的函数时,假设你已经有了一个图,因此一次只改变一个轴是错误的
所以这是错的
line1.set_xdata(x) line1.set_xdata(y)
改成
line1.set_data(x,y)
如果您已经绘制了图,请使用plt.draw()重新绘制以查看更改。

33qvvth1

33qvvth12#

我知道这是一个老职位,但对于任何人谁是仍然降落在这个问题上,有两个解决方案。
第一种解决方案是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可供绘制。

相关问题