簡體   English   中英

我如何打印我的 seaborn plot 到 tkinter window,將顯示在 IDE 但不堅持 canvas

[英]How do I print my seaborn plot to a tkinter window, will show in IDE but doesnt stick to canvas

我有:

def create_plot(): 

    df = pd.read_json("my_final_data.json")

    small_df = df[df.small_airport.isin(['Y'])]
    medium_df = df[df.medium_airport.isin(['Y'])]
    large_df = df[df.large_airport.isin(['Y'])] 

    plt.figure(figsize=(35,10))
    ax = sns.distplot(small_df['frequency_mhz'], color='red', label='Small Airports')
    sns.distplot(medium_df['frequency_mhz'], color='green', ax=ax, label='Medium Airports')
    sns.distplot(large_df['frequency_mhz'], ax=ax, label='Large Airports')
    plt.legend(loc="upper right")

    graph = plt.show()

    return graph


#Generating tkinter window
window1 = tk.Tk()
figure = create_plot()
canvas = FigureCanvasTkAgg(figure, master=window1)
canvas.draw()
canvas.get_tk_widget().pack()
tk.mainloop()

除了 canvas 之外,哪個發射 2(?) 空 tkinter windows,但 IDE 顯示了我試圖打印的實際圖表,所以我知道 function 正在做它的工作。

我如何使返回的圖表貼在 window 上?

  • 你得到 2 個空的 windows 因為你使用plt.show() ,它不打算在 tkinter 應用程序中使用。 另一個是空的 tkinter window(通過tk.Tk()生成),沒有任何內容。
  • 您還錯過了向我們提供示例數據 ( my_final_data.json )。
  • 一點點研究會給你帶來很多 seaborn 集成到 tkinter 的例子
  • 如此處所述 sns.distplot已棄用,我建議改用sns.displotsns.histplot一些不錯的 histplot 示例

這個例子應該讓你開始:

import tkinter as tk
import seaborn as sns
from matplotlib import pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk


def create_plot(root):
    # create random seaborn displot; replace this part with your own data
    figure, ax = plt.subplots(figsize=(6, 6))
    penguins = sns.load_dataset("penguins")
    sns.histplot(data=penguins, x="flipper_length_mm", ax=ax, hue="species")

    # create tkinter canvas from figure
    canvas = FigureCanvasTkAgg(figure, master=root)
    canvas.draw()
    canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

    # optional: create toolbar
    toolbar = NavigationToolbar2Tk(canvas, root)
    toolbar.update()
    canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)


# create your application
window1 = tk.Tk()

# call function to create plot
create_plot(window1)

# mainloop
tk.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM