我有:
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()
除了畫布之外,它會啟動 2(?)個空 tkinter 視窗,但是 IDE 顯示了我試圖列印的實際圖形,所以我知道該函式正在完成它的作業。
如何使回傳的圖形粘在視窗上?
uj5u.com熱心網友回復:
- 您得到 2 個空視窗,因為您使用
plt.show()了不打算在 tkinter 應用程式中使用的視窗。另一個是一個空的 tkinter 視窗(通過 生成tk.Tk()),沒有任何內容。 - 您也錯過了給我們提供樣本資料 (
my_final_data.json)。 - 稍加研究就會為您帶來很多將 seaborn 集成到 tkinter 的示例
sns.distplot如here所述已棄用,我建議使用sns.displotorsns.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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/465731.html
下一篇:使用檔案中的前幾個單詞命名檔案
