我是一名新的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中,无论你给出什么图形标题,它总是会创建单独的图形窗口。
答案 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()
答案 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()
。