PySimpleGUI 集成 matplotlib 画图 动态显示

文章介绍了如何在时间紧迫的情况下,利用pysimplegui而不是更复杂的pyqt来创建一个配置界面。该界面包含波形显示功能,并通过matplotlib进行图形绘制。在主函数中,通过调用draw()方法更新画布,使用clear()防止波形重叠,以及重新绘制波形以实现动态更新。同时,文章指出了在嵌入式使用matplotlib时,plot.pause()函数可能导致的问题。

缘由:设备需要做一个界面,配置参数,而且校准需要波形显示,本来想用pyqt 的但是时间有点紧,暂时就用 pysimplegui 凑合,虽然丑一点

实现:

  1. 常规的按钮,对话框
  2. 实现网络等
  3. 实现嵌入到画布的plot 且可以自动更新

效果如下图:
在这里插入图片描述

关键代码:

def make_figure(): # 初始化条用
    global  x,y
    global fig
    x = np.arange(0, 3, .01)
    y = 2 * np.sin(2 * np.pi * x)
    max_index = np.argmax(y)
    min_index = np.argmin(y)
    fig = plt.figure(facecolor="lightgray")
    plt.grid(True)

    #plt.plot(max_index/29, y[max_index], 'ks')
    #plt.plot(min_index/29, y[min_index], 'gs')
    #plt.plot(x, y)
    plt.title(u"matplot 测试")
    plt.xlabel('x')
    plt.ylabel('y')

    # 用来正常显示中文标签
    plt.rcParams['font.sans-serif'] = ['SimHei']
    # 用来正常显示负号
    plt.rcParams['axes.unicode_minus'] = False
    return fig

def make_figure1():# 更新波形需每次调用
    global  x,y
    global fig

    max_index = np.argmax(y)
    min_index = np.argmin(y)

    plt.grid(True)
    plt.plot(max_index/29, y[max_index], 'rs')
    plt.plot(min_index/29, y[min_index], 'gs')
    #plt.plot(x, y)
    plt.title(u"matplot ")
    plt.xlabel('x')
    plt.ylabel('y')

    # 用来正常显示中文标签
    plt.rcParams['font.sans-serif'] = ['SimHei']
    # 用来正常显示负号
    plt.rcParams['axes.unicode_minus'] = False
    return fig
#画在canvas上,包括工具条(工具条屏蔽掉了)
def draw_figure(canvas,canvas_toolbar, figure):
    global figure_canvas_agg
    global toolbar

    figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
    figure_canvas_agg.draw()
    #toolbar = NavigationToolbar2Tk(figure_canvas_agg,canvas_toolbar)
    #toolbar.update()
    figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1)
    return figure_canvas_agg

主函数:


            x = np.arange(0, 4, .01)  #重新更新数据
            y =np.sin(2 * np.pi * x)+ random.uniform(1.1,1.4)

            figure_canvas_agg.draw() # 更新画布
            fig.clear()  # 防止波形重叠
            make_figure1() #重新绘制波形
            plt.plot(x, y)
   

遇到的问题:
1.图像不能更新的问题
解决:
我们在主函数中调用
figure_canvas_agg.draw() # 更新画布
plt.plot(x, y)
2.图像覆盖的问题
解决;
fig.clear() # 防止波形重叠
make_figure1() #重新绘制波形
3.出现两个plot 同步更新的 波形
主要因为在主函数中调用了plot.pause(0.01) 这个函数在普通的动图中有用,但是这种嵌入式的使用方式上会出问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nyiragongo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值