首页 > 解决方案 > 画布中的图表

问题描述

我正在尝试在 Canvas 中显示折线图(字符串和数字),如数组中所示。我从这个论坛的不同问题中得到了这段代码,试图根据我的要求进行修改。有人可以指导我吗?

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({"Week": ['Week1','Week2','Week3','Week4','Week5'],
               "App1" : [2.6,3.4,3.25,2.8,1.75],
               "App2" : [2.5,2.9,3.0,3.3,3.4],
                "App3" : [1.6,2.4,1.25,5.8,6.75]})
df.plot(x="Week", y=["App1", "App2", "App3"])
plt.show()

线形图

标签: pythoncanvasgraph

解决方案


这是一个,以防其他人在寻找。

    # --- matplotlib ---
    import matplotlib
    matplotlib.use('TkAgg') # choose backend
    from tkinter import messagebox

    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, 
    NavigationToolbar2TkAgg
    from matplotlib.pyplot import Figure

   from matplotlib import pyplot as plt    
   # --- other ---
   import tkinter as tk
   import pandas as pd

   # --- GUI ---

   root = tk.Tk()

   # top frame for canvas and toolbar - which need `pack()` layout manager
   top = tk.Frame(root)
   top.pack()

   # bottom frame for other widgets - which may use other layout manager 
   bottom = tk.Frame(root)
   bottom.pack()

    # create figure
   fig = matplotlib.pyplot.Figure()

    # create matplotlib canvas using `fig` and assign to widget `top`
    canvas = FigureCanvasTkAgg(fig, top)

    # get canvas as tkinter widget and put in widget `top`
    canvas.get_tk_widget().pack()



    canvas._tkcanvas.pack()

     # --- plot ---

    data = {"Week": ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],
               "App1" : [2.6,3.4,3.25,2.8,1.75,5,2],
               "App2" : [2.5,2.9,3.0,3.3,3.4,5,3],
                "App3" : [1.6,15,1.25,5.8,6.75,6,4]
    }
     new_df = pd.DataFrame(data)

     ax = fig.add_subplot(111)

     fig.suptitle('Graph Title', fontsize=12)

     new_df.plot(x="Week", y=["App1", "App2", "App3"],ax=ax)

     def on_closing():
         root.destroy()

     root.protocol("WM_DELETE_WINDOW", on_closing)

     root.lift()
     root.attributes('-topmost',True)
     root.mainloop()

推荐阅读