来自更改长度数组的Python刷新Pyplot行

时间:2018-03-18 19:18:04

标签: 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:形状不匹配:无法将对象广播为单个形状

如何解决似乎需要数组为静态大小的要求?我宁愿不需要重新标题并从头开始构建情节 - 因为唯一需要改变的是线(并且可能自动重新调整轴)

1 个答案:

答案 0 :(得分:1)

图必须由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)