因为全文都是使用jupyter打开的,所以会使用一下%matplotlib inline
所以先简单解释一下%matplotlib inline
使用%matplotlib命令可以将matplotlib的图表直接嵌入到Notebook之中,或者使用指定的界面库显示图表,它有一个参数指定matplotlib图表的显示方式。inline表示将图表嵌入到Notebook中。
python提供了很多%magic行命令,可以用%magic查看都有哪些命令,在命令后添加?可以查看命令具体作用
当然,这里需要提一下的是,这些内置magic在pycharm里是不支持的,所以是不能在pycharm中使用
这个说完了,接下来进入正题
首先我们来看李沐老师的d2l包
def set_figsize(figsize=(3.5, 2.5)):
"""Set the figure size for matplotlib.
Defined in :numref:`sec_calculus`"""
use_svg_display()
d2l.plt.rcParams['figure.figsize'] = figsize
这里调用了一个方法,分别是use_svg_display(),对一个字典进行了赋值
d2l的定义如下:
import sys
d2l = sys.modules[__name__]
其实就是一个参数存储与传递的作用
然后use_svg_display()就在这个函数上当,简单来说就是进行一下设置,
from matplotlib_inline import backend_inline
def use_svg_display():
"""Use the svg format to display a plot in Jupyter.
Defined in :numref:`sec_calculus`"""
backend_inline.set_matplotlib_formats('svg')
全部的作用也就是设置成矢量图罢了
就是设置matplotlib的formats
Image.open()大家用的比较多的是PIL的Image.open,实际上也是一个意思,他只是吧Image导入进来了,也就是说其实去掉d2l也能正常运行,只是要import一下PIL包而已,同样的是plt.show(),李沐老师所作的只是帮我们进行了一下import。
所以运行结果是一样的
之后我们解析一下show_images()方法:
批量显示图片是plt一个比较常用的功能了,掌握一下也是挺好的,这种偏向于功能和基础向的东西李沐老师一般是不喜欢说的
def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5):
"""Plot a list of images.
Defined in :numref:`sec_utils`"""
figsize = (num_cols * scale, num_rows * scale)
_, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)
axes = axes.flatten()
for i, (ax, img) in enumerate(zip(axes, imgs)):
try:
img = d2l.numpy(img)
except:
pass
ax.imshow(img)
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
if titles:
ax.set_title(titles[i])
return axes
参数需要五个,两个含有默认值
imgs是图片的输入list,然后就是高宽个数
然后解释一下plt.subplot的作用以及用法
简单来说,这个函数就是把figure分为row*cols个子图,写法也比较多样。
比如
plt.subplot(232)
plt.subplot(2,3,2)
#这两者作用是相同的,简单来说就是把figure分为2*3,同时选择展平之后的第2个位置
matpltlib.pyplot.figure(
num = None, # 设定figure名称。系统默认按数字升序命名的figure_num(透视表输出窗口)e.g. “figure1”。可自行设定figure名称,名称或是INT,或是str类型;
figsize=None, # 设定figure尺寸。系统默认命令是rcParams["figure.fig.size"] = [6.4, 4.8],即figure长宽为6.4 * 4.8;
dpi=None, # 设定figure像素密度。系统默命令是rcParams["sigure.dpi"] = 100;
facecolor=None, # 设定figure背景色。系统默认命令是rcParams["figure.facecolor"] = 'w',即白色white;
edgecolor=None, frameon=True, # 设定要不要绘制轮廓&轮廓颜色。系统默认绘制轮廓,轮廓染色rcParams["figure.edgecolor"]='w',即白色white;
FigureClass=<class 'matplotlib.figure.Figure'>, # 设定使不使用一个figure模板。系统默认不使用;
clear=False, # 设定当同名figure存在时,是否替换它。系统默认False,即不替换。
**kwargs)
那么plt.subplots呢?
很简单,就是一次性得到所有层和画布
有两个返回值,一个是就是画布fig,第二个就是ax,也就是块
所以就很容易理解了,李沐老师通过一个循环进行了每个块的赋值,zip合并,然后增加个enumerate只是为了多产生一个i进行计数。
这部分的笔记我是结合数据增广那一章来的,所以就是简单进行一些转换吧。