Kivy使用kivy.clock更新matplotlib图

时间:2017-11-14 10:04:18

标签: python matplotlib kivy

我的kivy应用程序中有一个matplotlib图,我想用流数据每秒更新一次。到目前为止,我的行为有点奇怪。它确实更新,但只有当我调整窗口大小时

fig, ax = plt.subplots()
width = 0.65
ax.set_title('Scores by group and gender')
bar_canvas = fig.canvas

class Test(BoxLayout):
    catA = NumericProperty(0)
    catB = NumericProperty(0)
    catC = NumericProperty(0)

    #plot the bar graph
    def plot(self, dt):
        catA_rects = ax.bar(5, self.catA, width, color='g')
        catB_rects = ax.bar(6, self.catB, width, color='#808080')
        catC_rects = ax.bar(7, self.catC, width, color='r')
        ax.legend((catA_rects[0], catB_rects[0], catC_rects[0]), ('Category A', 'Category B', 'Category C'))


    #update the graph
    def update(self):
        Clock.schedule_interval(self.plot,1)

    def classify_sample(self, test_sample):
        result_prob = classifier.predict_proba(test_sample)[0]
        result = classifier.predict(test_sample)[0]

        if result_prob.max() > 0.55:
            if result == 1:
                self.catA += 1

            else:
                self.catC += 1

        else:
            self.catB += 1



class ClassificationApp(App):
    def build(self):
        res = Test()
        res.bar_tab.add_widget(bar_canvas)
        res.update()
        return res


if __name__ == '__main__':
    ClassificationApp().run()

在'kv'文件中,我调用classify_sample在RecycleView Viewclass中显示结果

Label:
    text: app.root.classify_sample(data)

我正在使用plot更新Clock.schedule_interval(self.plot,1)函数,当我在屏幕上打印输出时,该函数正在工作,但当catA, catB or catC的值时,图表没有更新变化 它仅在我稍微调整应用程序窗口大小时更新 enter image description here

enter image description here

enter image description here

还有另一种方法可以添加matplotlib以外的图形吗?当我为Android安装这个时,Matplotlib不会工作吗?

1 个答案:

答案 0 :(得分:0)

我犯了一个相当愚蠢的错误。在plot函数中更新图表后,我实际上并没有调用bar_canvas.draw()方法