当图标题相同时,Python matplotlib pyplot模块总是在现有的图形窗口上绘制

时间:2018-03-09 05:40:31

标签: python-3.x matplotlib

我是一名新的python用户,但是经验丰富的Matlab用户。我最近调试了一个python脚本,当我多次手动重新运行脚本时,我发现matplotlib有点烦人的问题:它总是在现有的图形窗口上绘制,如果图形标题相同则重叠在现有的图形上。

我正在调试的脚本如下所示:

import matplotlib.pyplot as plt
# Some calculations here
plt.figure('Results') # The script will only create one figure
# plot the data
# End of the script

Google上的一个简单搜索显示,如果我没有明确指定图形标题,或者给每个图形一个不同的图形,matplotlib可以创建单独的图形窗口,而且它是真的,它可以工作。

但是,有没有办法创建具有相同标题的多个图形窗口,而不给它们不同的句柄(在我的情况下,我必须手动执行)在python中?在Matlab中,无论你给出什么图形标题,它总是会创建单独的图形窗口。

2 个答案:

答案 0 :(得分:2)

figure的参数是一个标识符。如果保留为空,则将创建新图形,否则将激活具有该标识符的图形。 documentation使这一点变得相当明确:

  

matplotlib.pyplot.figure(num=None, ...)

     

num:整数或字符串,可选,默认值:无
  如果未提供,将创建新图形,图形编号将递增。图形对象将此数字保存在数字属性中。如果提供了num,并且已存在具有此id的数字,请将其设置为活动状态,并返回对它的引用。如果此图不存在,请创建它并返回它。如果num是一个字符串,则窗口标题将设置为此图的数字

因此,为了创建一个新的数字,请保留此参数或指定不同的参数。要设置窗口标题,请使用set_window_title

以下将创建两个具有相同窗口标题的图形。

import matplotlib.pyplot as plt

plt.figure()
plt.gcf().canvas.set_window_title('Results') 
plt.plot([1,2,3])

plt.figure()
plt.gcf().canvas.set_window_title('Results') 
plt.plot([2,3,1], color="crimson")

plt.show()

enter image description here

答案 1 :(得分:1)

从问题的第一段开始,......

  

当我多次手动重新运行脚本时,我发现了一些   讨厌matplotlib的问题:它总是借鉴现有的数字   窗口

我认为只需清除图形(在脚本开头)就可以重复运行脚本。

import matplotlib.pyplot as plt
# compute results here - random here as a standin.
import numpy as np
x = np.random.randn(500)
plt.figure("Results"); plt.clf()
# plot results here...
plt.hist(x, bins=20, histtype='step')

现在,每次运行脚本时,都会在空白画布上绘制结果,而不是在旧结果的顶部绘制结果。

下图显示了3次运行脚本(在ipython中)后的差异:左侧 - 没有plt.clf(),右侧 - 开始时带有plt.clf()

example results