代码之家  ›  专栏  ›  技术社区  ›  Boris

如何使用matplotlib图在tkinter中制作圆环图

  •  2
  • Boris  · 技术社区  · 6 年前

    我正在尝试使用tkinter和python 3.6构建一个简单的程序。当我试图在tkinter窗口中使用matplotlib图形和画布绘制油炸圈饼图时,我被卡住了。

    我知道如何使用matplotlib pyplot制作圆环图,使用我在上找到的一个非常简单的代码: https://python-graph-gallery.com/160-basic-donut-plot/

    # library
    import matplotlib.pyplot as plt
    
    # create data
    size_of_groups=[12,11,3,30]
    
    # Create a pieplot
    plt.pie(size_of_groups)
    #plt.show()
    
    # add a circle at the center
    my_circle=plt.Circle( (0,0), 0.7, color='white')
    p=plt.gcf()
    p.gca().add_artist(my_circle)
    
    plt.show()
    

    我读到tkinter中的绘图应该使用matplotlib进行。图: Placing plot on Tkinter main window in Python 有没有人能帮我调整上面的代码,以便能够将其绘制在我可以放置在tkinter画布中的图形中?

    到目前为止,我只能画出饼图

    fig = plt.figure.Figure(figsize=(5,5))
    a = fig.add_subplot(111)
    a.pie([20,30,50]) #an example data
    a.legend(["20","30","50")
    
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
    import tkinter as tk
    window= tk.Tk()
    canvas = FigureCanvasTkAgg(fig, master=window)
    canvas.get_tk_widget().pack()
    canvas.draw()
    window.mainloop()
    

    但我无法在中间添加一个圆来隐藏饼的那一部分。有什么办法吗? 谢谢

    1 回复  |  直到 6 年前
        1
  •  0
  •   ImportanceOfBeingErnest    6 年前

    不使用确实是个好主意 pyplot 在创建tk GUI时。这完全可以直接使用相应的matplotlib对象。

    import matplotlib.figure
    import matplotlib.patches
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
    import tkinter as tk
    
    fig = matplotlib.figure.Figure(figsize=(5,5))
    ax = fig.add_subplot(111)
    ax.pie([20,30,50]) 
    ax.legend(["20","30","50"])
    
    circle=matplotlib.patches.Circle( (0,0), 0.7, color='white')
    ax.add_artist(circle)
    
    window= tk.Tk()
    canvas = FigureCanvasTkAgg(fig, master=window)
    canvas.get_tk_widget().pack()
    canvas.draw()
    window.mainloop()