python – 如何更新matplotlib hexbin图?

前端之家收集整理的这篇文章主要介绍了python – 如何更新matplotlib hexbin图?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个嵌入在GTK.Window中的matplotlib hexbin,它可以绘制一些数据(x,y).我希望在接收新数据时(通过UDP)更新绘图.我虽然遇到了一些麻烦.

我可以通过几种不同的方式使它工作,但没有一种是“有效的”(含义 – 重绘绘图需要太长时间).我看了here并试图在建议的答案之后建模我的hexbin但是根本无法使用它.我一直收到以下错误

TypeError:’PolyCollection’对象不可迭代.

我猜测hexbins不能以与标准图相同的方式更新.

示例代码

class graph:
    def __init__(self):
        self.window = gtk.Window()
        self.figure = plt.figure()
        self.ax = self.figure.add_subplot(111)
        self.canvas = FigureCanvas(self.figure)
        self.window.add(self.canvas)

        self.graph = None

    def plot(self,xData,yData):
        if len(xData) > 1 and len(yData) > 1:
            self.graph,= self.ax.hexbin(self.xData,self.yData) 
            ###############################################
            ####This is where the code throws the error####

    def update(self,yData):
        self.graph.set_xdata(np.append(self.graph.get_xdata(),xData))
        self.graph.set_ydata(np.append(self.graph.get_ydata(),yData))
        self.figure.canvas.draw()

代码使用如下:

graph = graph()
graph.plot(someXData,someYData)
# when new data is received
graph.update(newXData,newYData)

这只是我如何使用代码的一个很小的例子.我对matplotlib没有太多经验,所以我有可能完全错误. (这很可能是我在做什么)

所以我的最终问题是 – 你如何更新matplotlib hexbin图?

编辑:感谢danodonovan的回答,我修改了我的代码,并在self.graph = self.ax.hexbin(…)后删除了’,’

抛出的新错误是:AttributeError:’PolyCollection’对象没有属性’set_xdata’

最佳答案
我不认为这可以在目前完成,hexbin转换x,y – >列表多边形的集合. polyCollection只是一个顶点,边和面颜色的列表,我不认为它带有关于它是如何生成的任何语义信息.

最好的方法是核旧旧的hexbin并用一个新的hexbin替换它.

如果你真的想要能够就地更新要么使用方形2d直方图(所以你可以使用imshow),或者你可以修改hexbin来返回补丁列表(而不是polyCollection)并跟踪你的binning自.

猜你在找的Python相关文章