我如何打印我的seaborborn plot到一个tkinter窗口,将显示在IDE中,但不坚持画布



我有:

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显示实际的图形我试图打印,所以我知道函数正在做它的工作。

我如何使返回的图形粘贴到窗口?

  • 你得到2个空窗口,因为你使用了plt.show(),这是不打算从一个更友好的应用程序中使用。另一个是空的tkinter窗口(通过tk.Tk()生成),没有任何内容。
  • 你们也没有给我们提供样本数据(my_final_data.json)。
  • 稍微研究一下就会给你带来很多海运整合的例子
  • 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()

最新更新