精华内容
下载资源
问答
  • 使用python中的Matplotlib +Tkinter 绘制3D图 Python提供了类似于MATLAB的2D绘图库,3D绘图库 将matplotlib绘制的图表镶嵌入tkinter做的界面中,tkinter是python的一个GUI库,有时候PC端UI界面上需要显示复杂的图时候...
  • Python matplotlibtkinter结合

    千次阅读 多人点赞 2019-03-29 23:49:50
    知识点:将 tkintermatplotlib 结合的整个套路是固定的,只需要关心我们的绘图逻辑和程序逻辑即可。 import matplotlib matplotlib.use('TkAgg') import numpy as np from matplotlib.backends.backend_...

    当前的图表和子图可以使用plt.gcf()和plt.gca()获得,分别表示Get Current Figure和Get Current Axes。在pyplot模块中,许多函数都是对当前的Figure或Axes对象进行处理,比如说:plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。 

    import matplotlib
    matplotlib.use('TkAgg')
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
    from matplotlib.figure import Figure
    from tkinter import *
    
    root = Tk()
    root.title("tkinter and matplotlib")
    
    f = Figure(figsize=(5, 4), dpi=100)
    f_plot = f.add_subplot(111)
    
    def other_picture_alg(): #数据相关的算法应该与plot分离开
        x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        y = [3, 6, 9, 12, 15, 18, 15, 12, 15, 18]
        return x, y
    
    def draw_picture():
        f_plot.clear()
        x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #关于数据的部分可以提取出来
        y = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
        f_plot.plot(x, y)
        canvs.draw()
    
    def draw_picture2():
        f_plot.clear()
        x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #关于数据的部分可以提取出来
        y = [2, 4, 6, 8, 10, 8, 6, 4, 2, 0]
        f_plot.plot(x, y)
        canvs.draw()
    
    def draw_picture3():
        f_plot.clear()
        x, y = other_picture_alg() # 使用由算法生成的数据,可以避免重复的运算过程
        f_plot.plot(x, y)
        canvs.draw()
    
    canvs = FigureCanvasTkAgg(f, root)
    canvs.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
    Button(root, text='pic', command=draw_picture).pack()
    Button(root, text='pic2', command=draw_picture2).pack()
    Button(root, text='pic3', command=draw_picture3).pack()
    
    root.mainloop()

    matplotlib与tkinter 结合

    import tkinter as tk
    import matplotlib
    from numpy import arange, sin, pi
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
    from matplotlib.backends.backend_tkagg import NavigationToolbar2TkAgg
    from matplotlib.backend_bases import key_press_handler
    from matplotlib.figure import Figure
    
    # matplotlib.use('TkAgg')
    
    root = tk.Tk()
    root.title("matplotlib in tkinter")
    
    # set a figure
    f = Figure(figsize=(5, 4), dpi=100)
    a = f.add_subplot(111)
    t = arange(0.0, 3.0, 0.01)
    s = sin(2*pi*t)
    a.plot(t, s)
    
    
    canvas = FigureCanvasTkAgg(f, master=root)
    canvas.show()
    canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
    
    toolbar = NavigationToolbar2TkAgg(canvas, root)
    toolbar.update()
    
    def on_key_event(event):
        print('you press %s' %event.key)
        key_press_handler(event, canvas, toolbar)
    
    canvas.mpl_connect('key_press_event', on_key_event)
    
    
    def _quit():
        root.quit()
        root.destroy()
    
    button = tk.Button(root, text='quit', command=_quit)
    button.pack(side=tk.BOTTOM)
    
    root.mainloop()

     结合后加图像操作按钮

    有些场合,我们需要对数据可视化。单是靠 tkinter 难度太大,而且做出来的效果不一定理想。此时,将 tkinter 与 matplotlib 结合,是最好的选择。知识点:将 tkinter 与 matplotlib 结合的整个套路是固定的,只需要关心我们的绘图逻辑和程序逻辑即可。

    import matplotlib
    matplotlib.use('TkAgg')
    import numpy as np
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,
    from matplotlib.backends.backend_tkagg import NavigationToolbar2TkAgg
    from matplotlib.figure import Figure
    import tkinter as tk
    class Application(tk.Tk):
        '''
        文件夹选择程序
        界面与逻辑分离
        '''
        def __init__(self):
            '''初始化'''
            super().__init__() # 有点相当于tk.Tk()
            self.wm_title("Embed matplotlib in tkinter")
            self.createWidgets()
        def createWidgets(self):
            '''界面'''
            fig = Figure(figsize=(5, 4), dpi=100)
            self.ax = fig.add_subplot(111)
            self.canvas = FigureCanvasTkAgg(fig, master=self)
            self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
            self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)
            toolbar = NavigationToolbar2TkAgg(self.canvas, self)
            toolbar.update()
            footframe = tk.Frame(master=self).pack(side=tk.BOTTOM)
            tk.Button(master=footframe, text='重画', command=self.draw).pack(side=tk.BOTTOM)
            tk.Button(master=footframe, text='退出', command=self._quit).pack(side=tk.BOTTOM)
            self.draw() # 绘图
        def draw(self):
            '''绘图逻辑'''
            x = np.random.randint(0, 50, size=100)
            y = np.random.randint(0, 50, size=100)
            # self.fig.clf() # 方式一:①清除整个Figure区域
            # self.ax = self.fig.add_subplot(111) # ②重新分配Axes区域
            self.ax.clear() # 方式二:①清除原来的Axes区域
            self.ax.scatter(x, y, s=3) # 重新画
            self.canvas.show()
        def _quit(self):
            '''退出'''
            self.quit() # 停止 mainloop
            self.destroy() # 销毁所有部件
    if __name__ == '__main__':
        # 实例化Application
        app = Application()
        # 主消息循环:
        app.mainloop()

    结果:


     

     

    1.title设置图像标题
    (1)title常用参数
    fontsize设置字体大小,默认12,可选参数 ['xx-small', 'x-small', 'small', 'medium', 'large','x-large', 'xx-large']
    fontweight设置字体粗细,可选参数 ['light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black']
    fontstyle设置字体类型,可选参数[ 'normal' | 'italic' | 'oblique' ],italic斜体,oblique倾斜
    verticalalignment设置水平对齐方式 ,可选参数 : 'center' , 'top' , 'bottom' ,'baseline' 
    horizontalalignment设置垂直对齐方式,可选参数:left,right,center
    rotation(旋转角度)可选参数为:vertical,horizontal 也可以为数字
    alpha透明度,参数值0至1之间
    backgroundcolor标题背景颜色
    bbox给标题增加外框 ,常用参数如下:
    boxstyle方框外形
    facecolor(简写fc)背景颜色
    edgecolor(简写ec)边框线条颜色
    edgewidth边框线条大小


    (2)title例子:

    plt.title('Interesting Graph',fontsize='large',fontweight='bold') 设置字体大小与格式
    plt.title('Interesting Graph',color='blue') 设置字体颜色
    plt.title('Interesting Graph',loc ='left') 设置字体位置
    plt.title('Interesting Graph',verticalalignment='bottom') 设置垂直对齐方式
    plt.title('Interesting Graph',rotation=45) 设置字体旋转角度
    plt.title('Interesting',bbox=dict(facecolor='g', edgecolor='blue', alpha=0.65 )) 标题边框

    面向对象api例子:

    import matplotlib.pyplot as plt
    x=[1,2,3,4,5]
    y=[3,6,7,9,2]
     
    fig,ax=plt.subplots(1,1)
    ax.plot(x,y,label='trend')
    ax.set_title('title test',fontsize=12,color='r')
    plt.show()
    2.annotate标注文字
    (1)annotate语法说明 :annotate(s='str' ,xy=(x,y) ,xytext=(l1,l2) ,..)


    s 为注释文本内容 
    xy 为被注释的坐标点
    xytext 为注释文字的坐标位置
    xycoords 参数如下:

    figure points          points from the lower left of the figure 点在图左下方
    figure pixels          pixels from the lower left of the figure 图左下角的像素
    figure fraction       fraction of figure from lower left 左下角数字部分
    axes points           points from lower left corner of axes 从左下角点的坐标
    axes pixels           pixels from lower left corner of axes 从左下角的像素坐标
    axes fraction        fraction of axes from lower left 左下角部分
    data                     use the coordinate system of the object being annotated(default) 使用的坐标系统被注释的对象(默认)
    polar(theta,r)       if not native ‘data’ coordinates t
    extcoords 设置注释文字偏移量

             | 参数 | 坐标系 | 
             | 'figure points' | 距离图形左下角的点数量 | 
             | 'figure pixels' | 距离图形左下角的像素数量 | 
             | 'figure fraction' | 0,0 是图形左下角,1,1 是右上角 | 
             | 'axes points' | 距离轴域左下角的点数量 | 
             | 'axes pixels' | 距离轴域左下角的像素数量 | 
             | 'axes fraction' | 0,0 是轴域左下角,1,1 是右上角 | 
             | 'data' | 使用轴域数据坐标系 |

    arrowprops  #箭头参数,参数类型为字典dict

    width           the width of the arrow in points                              点箭头的宽度
    headwidth   the width of the base of the arrow head in points  在点的箭头底座的宽度
    headlength  the length of the arrow head in points                   点箭头的长度
    shrink          fraction of total length to ‘shrink’ from both ends  总长度为分数“缩水”从两端
    facecolor     箭头颜色
    bbox给标题增加外框 ,常用参数如下:

      boxstyle方框外形
      facecolor(简写fc)背景颜色
      edgecolor(简写ec)边框线条颜色
      edgewidth边框线条大小
     bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k',lw=1 ,alpha=0.5)  #fc为facecolor,ec为edgecolor,lw为lineweight


    (2)案例

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.arange(0, 6)
    y = x * x
    plt.plot(x, y, marker='o')
    for xy in zip(x, y):
        plt.annotate("(%s,%s)" % xy, xy=xy, xytext=(-20, 10), textcoords='offset points')
    plt.show()

    plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),arrowprops=dict(facecolor='black', shrink=0.05))


    3.text设置文字说明
    (1)text语法说明

    text(x,y,string,fontsize=15,verticalalignment="top",horizontalalignment="right")

    x,y:表示坐标值上的值
    string:表示说明文字
    fontsize:表示字体大小
    verticalalignment:垂直对齐方式 ,参数:[ ‘center’ | ‘top’ | ‘bottom’ | ‘baseline’ ]
    horizontalalignment:水平对齐方式 ,参数:[ ‘center’ | ‘right’ | ‘left’ ]
    xycoords选择指定的坐标轴系统:

    figure points          points from the lower left of the figure 点在图左下方
    figure pixels          pixels from the lower left of the figure 图左下角的像素
    figure fraction       fraction of figure from lower left 左下角数字部分
    axes points           points from lower left corner of axes 从左下角点的坐标
    axes pixels           pixels from lower left corner of axes 从左下角的像素坐标
    axes fraction        fraction of axes from lower left 左下角部分
    data                     use the coordinate system of the object being annotated(default) 使用的坐标系统被注释的对象(默认)
    polar(theta,r)       if not native ‘data’ coordinates t
    arrowprops  #箭头参数,参数类型为字典dict

    width           the width of the arrow in points                              点箭头的宽度
    headwidth   the width of the base of the arrow head in points  在点的箭头底座的宽度
    headlength  the length of the arrow head in points                   点箭头的长度
    shrink          fraction of total length to ‘shrink’ from both ends  总长度为分数“缩水”从两端
    facecolor     箭头颜色
    bbox给标题增加外框 ,常用参数如下:

      boxstyle方框外形
      facecolor(简写fc)背景颜色
      edgecolor(简写ec)边框线条颜色
      edgewidth边框线条大小
     bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k',lw=1 ,alpha=0.5)  #fc为facecolor,ec为edgecolor,lw为lineweight

    (2)案例

    文字格式与位置:

    import matplotlib.pyplot as plt
    fig = plt.figure()
    plt.axis([0, 10, 0, 10])
    t = "This is a really long string that I'd rather have wrapped so that it"\
        " doesn't go outside of the figure, but if it's long enough it will go"\
        " off the top or bottom!"
    plt.text(4, 1, t, ha='left', rotation=15, wrap=True)
    plt.text(6, 5, t, ha='left', rotation=15, wrap=True)
    plt.text(5, 5, t, ha='right', rotation=-15, wrap=True)
    plt.text(5, 10, t, fontsize=18, style='oblique', ha='center',va='top',wrap=True)
    plt.text(3, 4, t, family='serif', style='italic', ha='right', wrap=True)
    plt.text(-1, 0, t, ha='left', rotation=-15, wrap=True)
    plt.show()


    花式文本框:
    import matplotlib.pyplot as plt
    plt.text(0.6, 0.5, "test", size=50, rotation=30.,ha="center", va="center",bbox=dict(boxstyle="round",ec=(1., 0.5, 0.5),fc=(1., 0.8, 0.8),))
    plt.text(0.5, 0.4, "test", size=50, rotation=-30.,ha="right", va="top",bbox=dict(boxstyle="square",ec=(1., 0.5, 0.5),fc=(1., 0.8, 0.8),))
    plt.draw()
    plt.show()


    数学公式:


    plt.title(r'$\alpha_i > \beta_i$', fontsize=20)
    plt.text(1, -0.6, r'$\sum_{i=0}^\infty x_i$', fontsize=20)
    plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$',fontsize=20)


    --------------------- 
    作者:开码牛 
    来源:CSDN 
    原文:https://blog.csdn.net/helunqu2017/article/details/78659490 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • matplotlib教程——matplotlibtkinter的集成

    万次阅读 多人点赞 2018-08-10 16:41:23
    一、matplotlibtkinter集成 我们在使用tkinter编写窗体程序的时候,希望做一些可视化的处理,即将matplotlib所化的图像与tkinter集成在一起显示, 二、实现代码 import math import numpy as np #-----------...

    一、matplotlib与tkinter集成

    我们在使用tkinter编写窗体程序的时候,希望做一些可视化的处理,即将matplotlib所化的图像与tkinter集成在一起显示,

    二、实现代码

    import math
    import numpy as np   
    #-------------------------------------------------------------------------------------------
    import matplotlib
    import matplotlib.pyplot as plt
    from matplotlib.pylab import mpl
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,NavigationToolbar2Tk #NavigationToolbar2TkAgg
    #------------------------------------------------------------------------------------------
    import tkinter as tk
    #------------------------------------------------------------------------------------------
    
    
    mpl.rcParams['font.sans-serif'] = ['SimHei']  #中文显示
    mpl.rcParams['axes.unicode_minus']=False      #负号显示
    
    class From:
        def __init__(self): 
            self.root=tk.Tk()                    #创建主窗体
            self.canvas=tk.Canvas()              #创建一块显示图形的画布
            self.figure=self.create_matplotlib() #返回matplotlib所画图形的figure对象
            self.create_form(self.figure)        #将figure显示在tkinter窗体上面
            self.root.mainloop()
    
        def create_matplotlib(self):
            #创建绘图对象f
            f=plt.figure(num=2,figsize=(16,12),dpi=80,facecolor="pink",edgecolor='green',frameon=True)
            #创建一副子图
            fig1=plt.subplot(1,1,1)
    
            x=np.arange(0,2*np.pi,0.1)
            y1=np.sin(x)
            y2=np.cos(x)
    
            line1,=fig1.plot(x,y1,color='red',linewidth=3,linestyle='--')    #画第一条线
            line2,=fig1.plot(x,y2) 
            plt.setp(line2,color='black',linewidth=8,linestyle='-',alpha=0.3)#华第二条线
    
            fig1.set_title("这是第一幅图",loc='center',pad=20,fontsize='xx-large',color='red')    #设置标题
            line1.set_label("正弦曲线")                                                           #确定图例
            fig1.legend(['正弦','余弦'],loc='upper left',facecolor='green',frameon=True,shadow=True,framealpha=0.5,fontsize='xx-large')
    
            fig1.set_xlabel('横坐标')                                                             #确定坐标轴标题
            fig1.set_ylabel("纵坐标")
            fig1.set_yticks([-1,-1/2,0,1/2,1])                                                   #设置坐标轴刻度
            fig1.grid(which='major',axis='x',color='r', linestyle='-', linewidth=2)              #设置网格
            
            return f
    
        def create_form(self,figure):
            #把绘制的图形显示到tkinter窗口上
            self.canvas=FigureCanvasTkAgg(figure,self.root)
            self.canvas.draw()  #以前的版本使用show()方法,matplotlib 2.2之后不再推荐show()用draw代替,但是用show不会报错,会显示警告
            self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
    
            #把matplotlib绘制图形的导航工具栏显示到tkinter窗口上
            toolbar =NavigationToolbar2Tk(self.canvas, self.root) #matplotlib 2.2版本之后推荐使用NavigationToolbar2Tk,若使用NavigationToolbar2TkAgg会警告
            toolbar.update()
            self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)
    
    if __name__=="__main__":
        form=From()

    三、总结

    matplotlib与tkinter集成主要是通过两个类完成的,如下

    (1)将图像显示在tkinter里面——三步走

    #把绘制的图形显示到tkinter窗口上

    self.canvas=FigureCanvasTkAgg(figure,self.root) #当然这里不一定显示在root,可以使frame,tabcontrol等等

    self.canvas.draw()

        #以前的版本使用show()方法,matplotlib 2.2之后不再推荐show()用draw代替,但是用show不会报错,会显示警告

    self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

    (2)将图像的相关工具也显示出来——三步走

    #把matplotlib绘制图形的导航工具栏显示到tkinter窗口上

    toolbar =NavigationToolbar2Tk(self.canvas, self.root) #matplotlib 2.2版本之后推荐使用NavigationToolbar2Tk,若使用                                                                                                         NavigationToolbar2TkAgg会警告

    toolbar.update()

    self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)

    四、实现效果

     

    展开全文
  • Python与算法社区已原创421篇给个星标是最大支持matplotlib 是绘图界最通用的库,功能强大,与其他系统集成友好,比如Python内置的绘图模块tkinter,这篇文章的主要...

    Python与算法社区

    已原创421篇

    给个星标是最大支持

    matplotlib 是绘图界最通用的库,功能强大,与其他系统集成友好,比如Python内置的绘图模块tkinter,这篇文章的主要目标:实现一个使用tkinter集成matplotlib交互绘图案例。

    tkinter模块设计精简,满足一些小型GUI设计,首先创建一个窗体对象,添加基本组件,如Label,Button,Radiobutton等,再pack或grid组件到父容器中。

    此案例,创建tkinter窗口及组件的代码,如下:

    window = tk.Tk()
    
    # 第2步,给窗口的可视化起名字
    window.title('My Window')
    
    # 第3步,设定窗口的大小(长 * 宽)
    # 这里的乘是小x
    window.geometry('1200x600')
    
    # 第4步,在图形界面上创建一个标签label用以显示并放置
    # 定义一个var用来将radiobutton的值和Label的值联系在一起.
    var = tk.StringVar()
    l = tk.Label(window, bg='yellow', width=30, height=3,
                 text='matplotlib in tkinter', font=('Arial', 21))
    
    l.pack()
    

    上面创建一个基本窗体,在上面创建Radiobutton组件,其父窗体是window对象。

    然后创建一个frame对象,在里面,再填充2个frame对象,一个位于左侧,另一个位于右侧:

    # 第二层frame,左frame,长在主frame上
    frame_l = tk.Frame(frame)
    # 第二层frame,右frame,长在主frame上
    frame_r = tk.Frame(frame)
    frame_l.pack(side='left')
    frame_r.pack(side='right')
    

    然后,在左侧frame中创建柱状图,右侧frame中创建饼状图。

    下面就是最重要的tkinter和matplotlib集成部分,matplotlib提供FigureCanvasTkAgg对象,只需三行代码,实现图形绘制在tkinter的Canvas中:

    canvas_l = FigureCanvasTkAgg(figure_l, frame_l)
    # 用draw代替
    canvas_l.draw()
    canvas_l.get_tk_widget().pack()
    

    第一行代码实现figure对象(matplotlib对象)与frame对象(tkinter组件)关系的建立,第二行使用集成后的对象中的draw方法绘图,最后拿到tkinter组件并组装到tkinter中。

    最终实现的展示效果如下:

    交互部分,选中Radiobutton中bar选项后,仅显示柱状图:

    选中pie选项时,仅显示饼状图:

    当选中both选项后,恢复全部显示。

    明天文章,我会详细得介绍此案例的开发细节,包括开发过程的坑点,欢迎到时关注。

    如果你想获取本文的全部源码,关注下面公众号,回复 1

    给我点个赞

    下次分享更有劲

    展开全文
  • 利用pandas分析数据并通过matplotlibtkinter上绘图

    利用pandas分析数据并通过matplotlib在tkinter上绘图

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

    嘻嘻

    资源下载(不用积分):
    下载文件

    你需要掌握的知识:
    1.文件操作os库
    2.tkinter图形库
    3.pandas数据分析库
    4.matplotlib绘图库
    5.python的基础知识
    源代码如下:

    import pandas as pd
    from tkinter import *
    from tkinter import ttk
    import tkinter as tk
    import os
    import matplotlib.pyplot as plt
    import matplotlib
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,NavigationToolbar2Tk 
    import mpl_toolkits.axisartist as axisartist
    class Analysis_of_the_vaccine:
        def __init__(self):
            self.root=Tk()
            self.root.geometry('1000x800')
            self.root.iconbitmap('0.gif')
            self.alldata=self.get_data()
            self.Gui()
            self.root.mainloop()
        def get_data(self):
            file_dir='D:/python_test/files'   
            all_file_list=os.listdir(file_dir)
            first=True
            for i in range(len(all_file_list)):
                if first:
                    csv=pd.read_csv('files/'+all_file_list[i])
                    first=False
                else:
                    tmp=pd.read_csv('files/'+all_file_list[i])
                    csv=pd.concat([csv,tmp],axis=0)
            csv=csv.dropna()
            csv.reset_index(drop=True,inplace=True)
            csv['price']=csv['price'].astype(str)
            for i in range(csv.shape[0]):
                csv['price'][i]=csv['price'][i].split('元')[0].split('/')[0]
            li=csv['price'].values.tolist()
            unuses=['议价失败','GMP到期,放弃议价','企业放弃议价','未报价','参考采购价参考(']
            for unuse in unuses:
                if unuse in li:
                    csv=csv.drop(csv[csv['price']==unuse].index)
            csv.reset_index(drop=True,inplace=True)
            self.create_company=csv['create_company'].unique()
            self.names=csv['name'].unique()
            self.province=[name[:-4] for name in all_file_list]
            return csv
        def get_pro_data(self,pro):
            pro_data=self.alldata[self.alldata['prov']==pro]
            pro_data.reset_index(drop=True,inplace=True)
            return pro_data
        def Gui(self):
            numIdx=4
            frames=[PhotoImage(file='100.gif', format='gif -index %i' %(i)) for i in range(numIdx)]
            def update(idx):
                frame = frames[idx]
                idx+=1
                label.configure(image=frame)
                self.root.after(100, update, idx%numIdx)
            self.labelframe=LabelFrame(self.root,text='图片展示',height=700,width=740)
            self.labelframe.pack(side='right')
            self.labelframe.pack_propagate(0)
            label=Label(self.labelframe)
            label.pack()
            self.root.after(0, update, 0)
            self.menubar=tk.Menu(self.root)
            self.filemenu=tk.Menu(self.menubar,tearoff=0)
            self.menubar.add_cascade(label='退出',menu=self.filemenu)
            self.filemenu.add_command(label='退出',command=self.Exit)
            self.root.config(menu=self.menubar)
            self.labelframe=LabelFrame(self.root,text='基本操作')
            self.labelframe.pack(side='left')
            v=tk.IntVar()
            r1=tk.Radiobutton(self.labelframe,text='各疫苗生产厂家生产的疫苗类别',variable=v,value=1,command=self._1)
            r1.pack(anchor="w")
            r2=tk.Radiobutton(self.labelframe,text='各省采购的疫苗类别和价格之间的关系',variable=v,value=2,command=self._2)
            r2.pack(anchor="w")
            r3=tk.Radiobutton(self.labelframe,text='同类疫苗在不同生产企业的价格走势',variable=v,value=3,command=self._3)
            r3.pack(anchor="w")
            self.root.mainloop()
        def Convert(self,para1,para2):
            self.canvas=FigureCanvasTkAgg(para1,para2)
            self.canvas.draw() 
            cv=self.canvas.get_tk_widget()
            cv.pack(side=tk.TOP, fill=tk.X, expand=1)
            toolbar=NavigationToolbar2Tk(self.canvas,para2) 
            toolbar.update()
            self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH,expand=1)
        def Exit(self):
            self.root.destroy()
        def exit(self):
            self.root1.destroy()
        def display(self):
            self.root1=Tk()
            self.root1.geometry('1000x800')
            self.labelframe1=LabelFrame(self.root1,text='子窗口',height=900,width=700)
            self.labelframe1.pack(fill='both',padx=5,pady=5)
            self.labelframe1.pack_propagate(0)
            self.labelframe2=LabelFrame(self.labelframe1,text='显示区',height=700,width=750)
            self.labelframe2.pack(side='right')
            self.labelframe2.pack_propagate(0)
            self.labelframe3=LabelFrame(self.labelframe1,text='操作区',width=230)
            self.labelframe3.pack(side='left',fill='y')
            self.labelframe3.pack_propagate(0)
        def display1(self,value_name,func,fir_msg):
            number=tk.StringVar()
            self.Listchoose=ttk.Combobox(self.labelframe3,width=150,height=40,textvariable=number,state='readonly')
            self.Listchoose['values']=list(value_name)    
            self.Listchoose.bind("<<ComboboxSelected>>",func)
            self.Listchoose.set(fir_msg)  
            self.Listchoose.pack() 
            self.button=Button(self.labelframe3, width=27, height=1, text="退出", bg='#FFD700',font=("楷", 12),command=self.exit)
            self.button.pack()
        def _3(self):
            self.display()
            self.display1(self.names,self._3event,'疫苗信息')
        def _3event(self,event):
            self.labelframe2.destroy()
            self.labelframe2=LabelFrame(self.labelframe1,text='显示区',height=700,width=750)
            self.labelframe2.pack(side='right')
            self.labelframe2.pack_propagate(0)
            alldata=self.alldata
            alldata['price']=alldata['price'].astype(float)
            alldata=alldata.drop(alldata[alldata['price']==0.].index)
            name=self.Listchoose.get()
            self.labelframe1['text']=name
            alldata['company_pro']=alldata['create_company']+'('+alldata['prov']+')'
            company=alldata[alldata['name']==name]['company_pro'].values
            price=alldata[alldata['name']==name]['price'].values
            self.figure=plt.figure()
            self.figure.clf()
            matplotlib.rcParams["font.family"] = "SimHei"
            plt.yticks(fontsize=5)
            plt.barh(company,price)
            self.Convert(self.figure,self.labelframe2)
        def _2(self): 
            self.display()  
            self.display1(self.province,self._2event,'省份')
        def _2event(self,event):
            self.labelframe2.destroy()
            self.labelframe2=LabelFrame(self.labelframe1,text='显示区',height=700,width=750)
            self.labelframe2.pack(side='right')
            self.labelframe2.pack_propagate(0)
            self.labelframe1['text']=self.Listchoose.get()
            pro_data=self.get_pro_data(self.Listchoose.get())
            pro_data['price']=pro_data['price'].astype(float)
            pro_data.reset_index(drop=True,inplace=True)
            price=[]
            names=pro_data['name'].unique()
            for name in names:
                price.append(pro_data.iloc[pro_data[pro_data['name']==name].index[0]][6])
            if max(price)<=0:
                price=[1 for i in price]
            self.figure=plt.figure()
            self.figure.clf()
            matplotlib.rcParams["font.family"] = "SimHei"
            plt.pie(x=price,labels=list(names),autopct='%.1f%%',labeldistance=1,radius=1,startangle=45,rotatelabels=True)
            self.Convert(self.figure,self.labelframe2)
        def _1(self):     
            self.display()
            yscrollbar=Scrollbar(self.root1)
            yscrollbar.pack(side='right',fill='y')
            self.text=Text(self.labelframe2,width=80,height=50,yscrollcommand=yscrollbar.set)
            self.text.pack()
            yscrollbar.config(command=self.text.yview)
            yscrollbar.pack()
            self.display1(self.create_company,self._1event,'生产厂家')
        def _1event(self,event):
            company=self.Listchoose.get()
            self.text.delete('1.0','end')
            self.labelframe1['text']=company
            names=self.alldata[self.alldata['create_company']==company]['name'].unique()
            for name in names:
                self.text.insert(END,name+'\n\n')
    

    最后

    如果你有疑问,请在评论区毫不犹豫地指出;如果你发现的我的问题,或者你有更好的想法,请告诉我;如果你对本篇文章感兴趣并且获得知识的话,请毫不犹豫地点赞关注我吧!

    展开全文
  • 进入正文一、概述 matplotlib是Python生态圈里面最为流行的图形可视化库,提供了庞大而且完善的绘图功能,在绝大多数情况下,基本上只要是你想要实现的功能,...
  • matplotlibtkinter的一些总结

    千次阅读 2020-07-16 18:11:32
    Python绘图】matplotlib:先搞明白plt. /ax./ fig再画 tkinter做界面时,plt画图不关闭界面直接退出mainGUI时会发生报错,解决方案之一是plt.close(),另一个就是避免采用plt,选择ax画图。 ax与plt的作用和根本区别...
  • 界面设计采用python tkinter ,绘图采用matplotlib。 程序设计完成在测试阶段出现绘图完成后界面自动关闭情况。 二、问题溯源 通过调试发现当plt.close()去掉后问题得到暂时解决,但该解决方案存在内存溢出的...
  • 目录 目录 前言 (一)小目标 1.首页卷面: 2.绘制一条函数曲线: 3.绘制多条曲线: (二)官方教材 1.对GUI框架的支持: 2.内嵌于tkinter的说明文档: ...
  • Matplotlib绘图嵌入Tkinter窗口的三方法

    千次阅读 2019-11-29 21:27:30
    参考官方文档的一些示例,对其进行补充,总结了三种方法。 使用其中一种方法时,将另外两种方法屏蔽...@author: Administrator三种把画图放到tkinter界面的方法,改进自官方文档 """ import tkinter #-----------...
  • from tkinter import * from tkinter import messagebox from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt # 创建画布需要的库 from matplotlib.backends.backend_tkagg import ...
  • Matplotlib绘制的图显示到Tkinter中(详细教程)

    万次阅读 多人点赞 2019-06-13 20:56:38
    运行环境:win10、python3 用Matplotlib自定义绘制图形 三次贝塞尔曲线有四个控制点,曲线在起始点与1,2两个点相切,在结束点与3,4两个点相切。 from matplotlib.path import Path from matplotlib.patc...
  • #matplotlibtkinter中的应用 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要...
  • 我想知道是否有人知道为什么下面的代码按下GUI上的按钮后没有显示带有一行的图形....这是我到目前为止:# import modules that I'm usingimport matplotlibmatplotlib.use('TKAgg')from matplotlib.backends....
  • from tkinter import filedialog #路径选择 from tkinter import * import matplotlib import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk ...
  • 本文实例讲述了Python实现在tkinter中使用matplotlib绘制图形的方法。分享给大家供大家参考,具体如下:一. 代码:# coding=utf-8import sysimport Tkinter as Tkimport matplotlibfrom numpy import arange, sin, ...
  • import tkinter import random import tkinter as tk import tkinter.font as tkFont import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg def generate_data(): ...
  • 用python tkinter显示股票的数据,将绘制的图形显示到tkinter:创建属于root的canvas画布,并将图f置于画布上 漂亮的界面是量化程序的...本文介绍如何使用用python tkinter matplotlib做出专业的K线图和展示各种技术指标:
  • Ubuntu系统下的pycharm不能识别matplotlib的问题。import matplotlib.pyplot as plt 的时候,开始出现没有matplotlib模块,后来采用如下方法解决:在python命令模式下:s1:&gt;&gt;&gt; import ...
  • matplotlib动图嵌入tkinter, 简单易懂
  • 在日常应用程序开发中,图表(折线图,柱状图等)以其直观显示,清晰明了的优势,使得应用范围越来越广泛,本文以一个简单的小例子,简述如何将TkinterMatplotlib相互关联起来,在应用程序中嵌入图表,仅供学习分享...
  • #!/usr/bin/env python #coding:utf-8 ...from Tkinter import * import matplotlib from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure def
  • 前一章节,我们解读了tkinter内嵌Matplotlib的教程,了解其内嵌的原理,就是在tkinter创建matplotlib的画布控件,再利用其返回的画布对象进行绘图,其他附加功能,使用tkinter控件实现。 (一)对matplotlib画布的...
  • tk的主循环将处理动画,因此不应使用血小板()或暂停(). 在动画功能将每隔interval秒调用一次。{cd2>不能在循环中使用。在没有任何理由向FigureCanvasTkAgg提供动画功能。...在#import serialfrom Tkinter...
  • Python GUI tkinter 加入matplotlib图表

    千次阅读 2020-07-09 21:43:46
    matplotlib 生成的图表插入tkinter可以扩展软件的功能,比如选中excel文件生成自动生成图表 本例需要的Python第三方库: tkinter:生成GUI matplotlib:生成图表 numpy:计算均值标准差 scipy:正态分布函数 xlrd:...
  • tkinter中显示matplotlib所画的图

    千次阅读 2020-07-08 22:27:59
    把使用matplotlib所画的饼状图显示在tkinter的窗口中,效果如下: 代码如下: import tkinter as tk import matplotlib from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure ...
  • 我一直在尝试在GUI后面传输一些脚本(使用Tkinter),到目前为止,所有打开的数据都显示在Tkinter画布上(使用matplotlib绘制)。在我唯一的问题是,matplotlib中的标准缩放/滚动(使用鼠标左键“移动”绘图,使用鼠标...
  • 在跑一个python3 demo的时候报这个错 重新apt安装,下载源码编译安装之后依旧报这个错 ...在python3中 Tkinter 换成了小写 tkinter 在你试上面那些各种安装覆盖安装的方法之前。 先试试 import tkinter
  • 我试图用tkinter创建一个GUI,它向我显示我捕捉到的事件的动画,当我单击一个按钮时,下一个事件应该会显示出来。到目前为止,我的代码确实做到了这一点,但我遇到的问题是,当我单击按钮显示下一个事件时,旧事件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,108
精华内容 2,443
关键字:

matplotlibtkinter