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

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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值