PySimpleGUI 集成 matplotlib 画图 动态显示

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

实现:

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

效果如下图:
PySimpleGUI 集成 matplotlib 画图 动态显示_第1张图片

关键代码:

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) 这个函数在普通的动图中有用,但是这种嵌入式的使用方式上会出问题

你可能感兴趣的:(matplotlib,python,数据分析,pyqt)