import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
def figure(num=None,
figsize=None,
dpi=None,
facecolor=None,
edgecolor=None,
frameon=True,
FigureClass=Figure,
clear=False,
**kwargs
):
"""
Returns【这段不明白】
-------
figure : Figure
The Figure instance returned will also be passed to new_figure_manager
in the backends【后端】, which allows to hook custom Figure classes into the
pylab interface. Additional kwargs will be passed to the figure init
function.
Notes【大意是一次只能有一个活跃的figure】
-----
If you are creating many figures, make sure you explicitly【明确地】 call "close"
on the figures you are not using, because this will enable pylab
to properly clean up the memory.
rcParams defines the default values, which can be modified in the
matplotlibrc file【这个参数在源码中不知道怎么找,下面打印了默认值】
"""
'''
参数:
num:编号。可以是字符串,整数,默认是none
figsize:图片大小。整数的元组(以英尺为单位的宽高值,一英尺是2.54厘米),默认是none
dpi:分辨率。整数,默认是none
facecolor:背景颜色。默认是none
edgecolor:边框颜色。默认是none
frameon:边框。布尔值,默认是true,有边框
FigureClass:继承matplotlib.figure.Figure的一个类。默认类名Figure
clear:清空。布尔值,默认false,不清空
**kwargs
'''
if figsize is None:
figsize = rcParams['figure.figsize'] # figsize如果是none则默认是[6.4, 4.8]
if dpi is None:
dpi = rcParams['figure.dpi'] # dpi == == == == = 100.0
if facecolor is None:
facecolor = rcParams['figure.facecolor'] # facecolor == == == == = w
if edgecolor is None:
edgecolor = rcParams['figure.edgecolor'] # edgecolor == == == == = w
allnums = get_fignums() # allnums == == == ==[]
next_num = max(allnums) + 1 if allnums else 1 # next_num == == == ==1
figLabel = ''
if num is None:
num = next_num
elif isinstance(num, six.string_types): # todo
figLabel = num
allLabels = get_figlabels() # todo
if figLabel not in allLabels:
if figLabel == 'all':
warnings.warn("close('all') closes all existing figures") # todo
num = next_num
else:
inum = allLabels.index(figLabel) # todo
num = allnums[inum] # todo
else:
num = int(num)
'''
如果num传none则是默认的递增整数
如果num传数字那么就是这个数字
如果num传字符串分三种情况:
字符串在allLabels里已经存在,则num是列表里的序号
字符串在allLabels不存在,num是递增的整数
字符串是"all",则提出警告,且num是递增的整数
这里num=1
'''
figManager = _pylab_helpers.Gcf.get_fig_manager(num)
'''
获取num对应的manager并使它活跃,并且返回相应manager,
这里返回的none
'''
if figManager is None: # 如果返回的manager是none:
max_open_warning = rcParams['figure.max_open_warning'] # max_open_warning=======20
print(9999, max_open_warning)
if (max_open_warning >= 1 and len(allnums) >= max_open_warning): # 如果figure数大于允许的最大值20,目前figure数为0:
warnings.warn(
"More than %d figures have been opened. Figures "
"created through the pyplot interface "
"(`matplotlib.pyplot.figure`) are retained until "
"explicitly closed and may consume too much memory. "
"(To control this warning, see the rcParam "
"`figure.max_open_warning`)." %
max_open_warning, RuntimeWarning)
# get_backend().lower()====== module://backend_interagg
if get_backend().lower() == 'ps':
dpi = 72
# 创建一个figManager,暂时不讨论如何创建
figManager = new_figure_manager(num, figsize=figsize,
dpi=dpi,
facecolor=facecolor,
edgecolor=edgecolor,
frameon=frameon,
FigureClass=FigureClass,
**kwargs)
if figLabel: # 为空
figManager.set_window_title(figLabel)
figManager.canvas.figure.set_label(figLabel)
# make this figure current on button press event【不懂】
def make_active(event):
_pylab_helpers.Gcf.set_active(figManager)
cid = figManager.canvas.mpl_connect('button_press_event', make_active)
figManager._cidgcf = cid
_pylab_helpers.Gcf.set_active(figManager)
fig = figManager.canvas.figure
fig.number = num
# make sure backends (inline) that we don't ship that expect this
# to be called in plotting commands to make the figure call show
# still work. There is probably a better way to do this in the
# FigureManager base class.
#【不懂】
if matplotlib.is_interactive():
draw_if_interactive()
if _INSTALL_FIG_OBSERVER:
fig.stale_callback = _auto_draw_if_interactive
if clear: # 如果传的clear为true则清空
figManager.canvas.figure.clear()
return figManager.canvas.figure # 返回Figure(640x480)像素640x480的一个画图屏幕
网友评论