旧版本
import matplotlib.pyplot as plt
self.fig = plt.figure(figsize=(8,6))
if os.path.isfile('./UI.png'):
image = plt.imread('./UI.png')
plt.axis('off')
plt.tight_layout()
im = plt.imshow(image)
# The Canvas
self.canvas = FigureCanvasTkAgg(self.fig, master = master)
self.toolbar = NavigationToolbar2TkAgg(self.canvas, root)
self.canvas.get_tk_widget().pack(fill=BOTH,expand=YES)
self.canvas.draw()
中级(UI.png未显示)
import matplotlib.pyplot as plt
import matplotlib
self.fig = matplotlib.figure.Figure(figsize=(8, 6))
if os.path.isfile('./UI.png'):
image = matplotlib.image.imread('./UI.png')
plt.axis('off')
plt.tight_layout()
plt.imshow(image)
# The Canvas
self.canvas = FigureCanvasTkAgg(self.fig, master=master)
self.toolbar = NavigationToolbar2TkAgg(self.canvas, root)
self.canvas.get_tk_widget().pack(fill=BOTH, expand=YES)
self.canvas.draw()
修改代码后,'background'图片不再显示,我一直在尝试一些随机的方法(因为我很迷失于两个选项之间的差异),以便再次显示该图。修改涉及从
tight_layout
转换到set_tight_layout
,以避免警告,如https://github.com/matplotlib/matplotlib/issues/1852所述。最终的代码如下:
潜在解决方案
import matplotlib.pyplot as plt
import matplotlib
self.fig = matplotlib.figure.Figure(figsize=(8, 6))
background_image = self.fig.add_subplot(111)
if os.path.isfile('./UI.png'):
image = matplotlib.image.imread('./UI.png')
background_image.axis('off')
#self.fig.tight_layout() # This throws a warning and falls back to Agg renderer, 'avoided' by using the line below this one.
self.fig.set_tight_layout(True)
background_image.imshow(image)
# The Canvas
self.canvas = FigureCanvasTkAgg(self.fig, master=master)
self.toolbar = NavigationToolbar2TkAgg(self.canvas, root)
self.canvas.get_tk_widget().pack(fill=BOTH, expand=YES)
self.canvas.draw()
因此,问题是,为什么我们现在需要使用一个子图(使用matplotlib.figure.Figure)而之前没有(使用matplotlib.pyplot)?
PS:如果这个问题很傻,请原谅,但几乎我能找到的所有关于这个主题的东西似乎都使用matplotlib.pyplot变量。因此,我很难找到任何关于matplotlib.figure.Figure变量的好的文档。
fig.gca()
(就像你在修复中列出的那样)? - Bas Jansengca()
更清晰易读 - 我总是认为subplot可能会有多个。但是,这确实取决于个人喜好 - 两者都可以。如果你在gca()
之后执行print(type(ax))
,你会看到它的具体类型实际上是AxesSubplot
(Axes
的子类) - 与add_subplot()
返回的完全相同。 - J Richard Snape