当前位置:   article > 正文

pythonmatplotlib共享绘图区域_在Python中使用Matplotlib和Kivy进行实时绘图

kivy 中调用matplotlib

so... I've been trying to get kivy to plot data generated in real time, using matplotlib. I've used similar code to this one before in TkInter and it worked like a charm so I'm really confused why it does not work here.

Here's the code:

import numpy as np

import matplotlib

matplotlib.use('module://kivy.garden.matplotlib.backend_kivy')

from kivy.app import App

from kivy.uix.boxlayout import BoxLayout

from kivy.clock import Clock

import matplotlib.pyplot as plt

class MyApp(App):

def build(self):

box = BoxLayout()

self.fig,self.ax = plt.subplots(1)

self.plt_canvas = self.fig.canvas

box.add_widget(self.plt_canvas)

self.line = self.ax.plot([])[0]

self.i = 0

plt.show()

Clock.schedule_interval(self.update, 1)

return box

def update(self, *args):

self.line.set_xdata(np.arange(self.i))

self.line.set_ydata(np.arange(self.i))

self.i +=1

plt.draw()

MyApp().run()

I wanted to get it to plot the line, 1 point each second. But instead I get this:

Seems like the canvas is not redrawing. What am I doing wrong?

解决方案

As suggested by @ImportanceOfBeingErnest, the axes limits need to be updated.

The following code should solve your problem:

import matplotlib

matplotlib.use('module://kivy.garden.matplotlib.backend_kivy')

from kivy.app import App

from kivy.uix.boxlayout import BoxLayout

from kivy.clock import Clock

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

canvas = fig.canvas

class MyApp(App):

def build(self):

box = BoxLayout()

self.i = 0

self.line = [self.i]

box.add_widget(canvas)

plt.show()

Clock.schedule_interval(self.update, 1)

return box

def update(self, *args):

plt.plot(self.line, self.line)

self.i += 1

self.line.append(self.i)

canvas.draw_idle()

MyApp().run()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/737831
推荐阅读
相关标签
  

闽ICP备14008679号