gcf没有给出与用于绘制它的图相同的图形ID

时间:2016-03-31 08:02:28

标签: python matplotlib

import numpy as np
import matplotlib.pyplot as plt
li = [[0,0],[20,10], [30,40] ]
xs = [x[0] for x in li]
ys = [x[1] for x in li]

aa = [0, 10, 40]
bb = [0, 10, 40]

fig = plt.figure(figsize=(12,4))
print "type(fig) : " , type(fig)
ax = fig.add_subplot(1,1,1)
print "type(ax) : " , type(ax)
print "ax : " , ax

ax.plot(xs, ys, '--', linewidth=2, color='red')
ax.plot(ys, xs)
ax.plot(aa, bb)

plt.legend(('PID_1', 'PID_2'), loc='best', shadow=True, fancybox=True,  ncol=2)
plt.show()

gca = fig.gca() #could have used plt.gca() also
print "fig    : " , fig , ", type(fig)    : " , type(fig), ", id(fig) :    " , id(fig)

figObj = gca.get_figure()
print "figObj : " , figObj , ", type(figObj) : " , type(figObj) , ", id(figObj) : " , id(figObj)


currGcf = plt.gcf()
print "currGcf    : " , currGcf , ", type(currGcf)    : " , type(currGcf), ", id(currGcF) : " , id(currGcf)

输出:

fig    :  Figure(960x320) , type(fig)    :  <class 'matplotlib.figure.Figure'> , id(fig) :     172216392
figObj :  Figure(960x320) , type(figObj) :  <class 'matplotlib.figure.Figure'> , id(figObj) :  172216392
currGcf    :  Figure(480x320) , type(currGcf)    :  <class 'matplotlib.figure.Figure'> , id(currGcF) :  213232048
<matplotlib.figure.Figure at 0xcb5a9b0>

我认为gcf给出了当前的数字..所以,在这种情况下,前两个输出给出了相同的id和大小。

但是,size和id的最后一个gcf输出是不同的.. 请解释一下,为什么会有这种差异??

1 个答案:

答案 0 :(得分:1)

这是因为您放置了plt.show()。要在调用show后运行脚本,需要关闭窗口。然后,这会更改“当前”图形(如果您尝试绘制其他内容,它将显示在新的图形窗口中)。

如果您将plt.show()移到脚本末尾,则所有三行(fig, figObj, currGcf)都会打印相同的对象ID