**已关闭。**此问题为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]))
字符串
2条答案
按热度按时间brc7rcf01#
这是因为您最初已经创建了一个带有引用变量
line1
的图。因此,当你第一次执行你创建的函数时,假设你已经有了一个图,因此一次只改变一个轴是错误的所以这是错的
line1.set_xdata(x) line1.set_xdata(y)
个改成
line1.set_data(x,y)
个如果您已经绘制了图,请使用
plt.draw()
重新绘制以查看更改。33qvvth12#
我知道这是一个老职位,但对于任何人谁是仍然降落在这个问题上,有两个解决方案。
第一种解决方案是Aakash Verma写的in their solution,即用简单的
line1.set_data(x,y)
替换line1.set_xdata(x)
和line1.set_xdata(y)
,这将保持xdata
和ydata
的长度相同,假设输入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
可供绘制。