Matplotlib 的line2D对象,例如调用 返回的对象,plot有一个方便的方法 ,set_data让我可以快速更新单行绘制的值,而不会影响绘图的其余部分或行的格式。
#sample plot
from matplotlib.pyplot import plot
p = plot(arange(10),arange(10))[0]
#now update the data
p.set_data(arange(10),arange(10)+2)
draw()
Run Code Online (Sandbox Code Playgroud)
是否有任何相对简单的(几行代码)方法可以对errorbar绘图执行相同的操作?我希望能够使用各种文本、箭头、线条等设置复杂的绘图,然后通过几组不同的数据快速循环绘图的误差条部分。
返回的对象errorbar似乎非常复杂,到目前为止,我尝试删除和重绘都失败了。
感谢@tacaswell 的帮助。下面是可以更新xerr和yerr以及用于基线绘图的x_data和的 python 函数:y_data
def adjustErrbarxy(self, errobj, x, y, x_error, y_error):
ln, (errx_top, errx_bot, erry_top, erry_bot), (barsx, barsy) = errobj
x_base = x
y_base = y
xerr_top = x_base + x_error
xerr_bot = x_base - x_error
yerr_top = y_base + y_error
yerr_bot = y_base - y_error
errx_top.set_xdata(xerr_top)
errx_bot.set_xdata(xerr_bot)
errx_top.set_ydata(y_base)
errx_bot.set_ydata(y_base)
erry_top.set_xdata(x_base)
erry_bot.set_xdata(x_base)
erry_top.set_ydata(yerr_top)
erry_bot.set_ydata(yerr_bot)
new_segments_x = [np.array([[xt, y], [xb,y]]) for xt, xb, y in zip(xerr_top, xerr_bot, y_base)]
new_segments_y = [np.array([[x, yt], [x,yb]]) for x, yt, yb in zip(x_base, yerr_top, yerr_bot)]
barsx.set_segments(new_segments_x)
barsy.set_segments(new_segments_y)
Run Code Online (Sandbox Code Playgroud)
第一个输入参数(self对于python类)是已经创建的errorbar绘图处理程序,也是需要更新属性的对象;x和y是更新后的数组,应显示沿和轴numpy的平均值;最后两个参数和是为和数组计算的范围。如果只需要更新误差条,则和应该分别写为和。xyx_errory_errorerrorbarxyx_basey_baseln.get_xdata()ln.get_ydata()
到目前为止,errorbar更新的解决方案matplotlib确实非常重要,希望在未来的版本中能够变得更加容易。
| 归档时间: |
|
| 查看次数: |
1627 次 |
| 最近记录: |