在多个Matplotlib图窗口中更改图标

时间:2017-09-20 17:00:48

标签: matplotlib tkinter matplotlib-basemap

我在matplotlib中有2个数字,一个是标准图,另一个是我绘制lat / long的底图。我试图为两个窗口设置一个徽标,但我只能在图1中获得自定义徽标,图2仍然显示Tkinter徽标。

我按照Change icon in a Matplotlib figure window

中的一个答案
from Tkinter import PhotoImage
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np

thismanager = plt.get_current_fig_manager()
img = PhotoImage(file='elcc_logo.ppm')

我有2个情节:

plt.figure(num=1, figsize=(16, 12))
thismanager.window.tk.call('wm', 'iconphoto', thismanager.window._w, img)
plt.plot(date, energyplot, 'bo')

plt.figure(num=2, figsize=(10, 8))
thismanager.window.tk.call('wm', 'iconphoto', thismanager.window._w, img)
earth = Basemap(projection='mill')
earth.drawcoastlines(color='0.50', linewidth=0.25)
earth.fillcontinents(color='0.95', zorder=0)
x, y = earth(longitudes, latitudes)
earth.scatter(x, y, color='g', marker='o', linewidths=0.5)
for i, txt in enumerate(datalogger_id):
        plt.annotate(txt, xy=(x[i], y[i]), xycoords='data', xytext=(8, -4), textcoords='offset points', clip_on=True)
plt.show()

我可以交换图号和num=1获得徽标的那个,我不能同时得到它。

1 个答案:

答案 0 :(得分:0)

我会尝试以下(遗憾的是我无法测试它,因为我没有任何图标文件可用),你可以在每个图中创建一个管理器。

import matplotlib; matplotlib.use("TkAgg")
from Tkinter import PhotoImage
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np

plt.figure(num=1, figsize=(16, 12))
thismanager = plt.get_current_fig_manager()
img = PhotoImage(name="icon.ppm")
thismanager.window.tk.call('wm', 'iconphoto', thismanager.window._w, img)

plt.figure(num=2, figsize=(10, 8))
thismanager2 = plt.get_current_fig_manager()
img2 = PhotoImage(name="icon.ppm")
thismanager2.window.tk.call('wm', 'iconphoto', thismanager2.window._w, img2)

plt.show()