Python 从长度变化的数组中刷新 Pyplot 线

标签 python arrays matplotlib graph line

我确信有人问过这个问题,但我很难找到适用于搜索的简洁答案。一些好的答案似乎取决于提前计算数组的最终大小。看起来这应该很简单,而且我是个新手,所以也许我只是搜索了错误的术语......

我的问题是: 当数组的长度未知且随时间变化时,如何让 PyPlot 刷新源自 numpy 数据数组的现有行的数据?

我当前的代码如下

#Initial Setup    
changing_dataset = np.array(1) #initialize with a single blank y-value   
plt.close('all') #clear all the priors   
plt.ion()
f, axarr = plt.subplots(3,2) #setup a 3x2 plot ...only 1 shown below
axarr[0,0].set_title('My Plot')
line1, = axarr[0,0].plot(changing_dataset)
plt.show

... some code which appends new data to changing_dataset is omitted here...

那么我只想这样做:

line1.set_ydata(changing_dataset)
f.canvas.draw() 
f.canvas.flush_events()
plt.show()

为了更新我的初始图中的线,现在基于数组“changing_dataset”中包含的新的、更大的数据集。

但这会产生类似的错误

ValueError:形状不匹配:对象无法广播到单个形状

如何解决似乎需要数组具有静态大小的要求?我希望不需要重新标题并从头开始构建绘图 - 因为唯一需要更改的是线(并且可能自动重新缩放轴)

最佳答案

绘图必然由 x 和 y 值组成。当设置 line1.set_ydata(new_y_data) 时,其中 new_y_data 的长度与原始 y 数据不同,您会破坏 x 和 y 值的对应关系,从而导致观察到的形状不匹配错误在问题中。

如果要更改图中 y 值的数量,则还需要更改 x 值的数量。

要么使用

line.set_xdata(new_x_values)
line.set_ydata(new_y_values)

或排成一行

line.set_data(new_x_values, new_y_values)

如果您根据索引绘制 y 值,new_x_values 将只是前 n 个整数,其中 n 是 y 值的数量,

line.set_data(np.arange(len(new_y_values)), new_y_values)

关于Python 从长度变化的数组中刷新 Pyplot 线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49351897/

相关文章:

python - 我应该避免重新打包多个未打包的可迭代对象吗?例如(*(1,2),*(3,4)) 得到 (1,2,3,4)

c - 如何通过 x86 程序集访问整数数组中的元素

python matplotlib图例线型 '---'

python - 使用序列 matplotlib 3d 设置数组元素

python - Matplotlib 的默认 GUI 后端是什么?

python - 如何将一组数字更改为时间 [Python]

python - 具有附加值的 Argparse 参数

Javascript二维字符串数组更新值

javascript - 在 javaScript 的条件 && 语句中迭代数组?

python - 剥离逗号和句号