图像基本知识:
通常情况下,我们可以将一副Matplotlib图像分成三层结构:
1.第一层是底层的容器层,主要包括Canvas、Figure、Axes;
2.第二层是辅助显示层,主要包括Axis、Spines、Tick、Grid、Legend、Title等,该层可通过set_axis_off()或set_frame_on(False)等方法设置不显示;
3.第三层为图像层,即通过plot、contour、scatter等方法绘制的图像。
容器层:容器层主要由Canvas、Figure、Axes组成
Canvas是位于最底层的系统层,绘图过程中充当画板的角色,即放置画布的工具。通常情况下,我们并不需要对Canvas特别的声明,但是当我需要在其他模块如PyQt中调用Matplotlib模块绘图时,就需要首先声明Canvas,这就相当于我们在自家画室画画不用强调要用画板,出去写生时要特意带一块画板。
Figure(fig)是Canvas上方的第一层,也是需要用户来操作的应用层的第一层,在绘图的过程中充当画布的角色。当我们对Figure大小、背景色彩等进行设置的时候,就相当于是选择画布大小、材质的过程。因此,每当我们绘图的时候,写的第一行就是创建Figure的代码。
Axes(ax,坐标系)是应用层的第二层,在绘图的过程中相当于画布上绘图区的角色。一个Figure对象可以包含多个Axes对象,每个Axes都是一个独立的坐标系,绘图过程中的所有图像都是基于坐标系绘制的。
辅助显示层:
辅助显示层为Axes内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。该层的设置可使图像显示更加直观更加容易被用户理解,但又并不会对图像产生实质的影响。
图像层:
图像层指Axes内通过plot、scatter、hist、contour、bar、barbs等函数根据数据绘制出的图像。
保存图表plt.savefig()
调用plt.savefig()将当前的Figure对象保存成图像文件,图像格式由图像文件的扩展名决定。下面程序将当前的图表保存为“test.png”,并且通过dpi指定图像的分辨率为120,因此输出图像的宽度为“8X120 = 960”个像素。使用这种方法可以很容易编写出批量输出图表的程序。plt.savefig("test.png",dpi=120)
plt.imshow()
imshow()函数格式为:matplotlib.pyplot.imshow
(X, cmap=None)
X: 要绘制的图像或数组
cmap: 颜色图谱(colormap), 默认绘制为RGB(A)颜色空间。其它可选的颜色图谱如下列表:
颜色图谱 |
描述 |
autumn |
红-橙-黄 |
bone |
黑-白,x线 |
cool |
青-洋红 |
copper |
黑-铜 |
flag |
红-白-蓝-黑 |
gray |
黑-白 |
hot |
黑-红-黄-白 |
hsv |
hsv颜色空间, 红-黄-绿-青-蓝-洋红-红 |
inferno |
黑-红-黄 |
jet |
蓝-青-黄-红 |
magma |
黑-红-白 |
pink |
黑-粉-白 |
plasma |
绿-红-黄 |
prism |
红-黄-绿-蓝-紫-...-绿模式 |
spring |
洋红-黄 |
summer |
绿-黄 |
viridis |
蓝-绿-黄 |
winter |
蓝-绿 |
Plt.figure()
matplotlib.pyplot.figure
(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None)
所有参数都是可选的,都有默认值,因此调用该函数时可以不带任何参数,其中:
num: 整型或字符型都可以。设置为整型,则该整型数字表示窗口序号。设置为字符型,则该字符串表示窗口名称。用该参数来命名窗口,两个窗口序号或名相同,则后一个窗口会覆盖前一个窗口。
figsize: 设置窗口大小。是一个tuple型的整数,如figsize=(8,8)。
dpi: 整形数字,表示窗口的分辨率。
facecolor: 窗口的背景颜色。edgecolor: 窗口的边框颜色。
用figure()函数创建的窗口,只能显示一幅图片,显示多幅图片,则需要将这个窗口再划分为几个子图,在每个子图中显示不同的图片。
可以使用subplot()函数来划分子图,函数格式为:
matplotlib.pyplot.subplot(nrows, ncols, plot_number)
nrows: 子图的行数。
ncols: 子图的列数。
plot_number: 当前子图的编号。
ax.get_xlim()
获得Axes的x坐标范围,默认是 (0.0, 1.0)
ax.get_yscale()
获得y轴的数据刻画类型
ax.set_xscale('log')
将x轴设置为log
plt.tight_layout()
如果有多个子图,我们可以使用tight_layout()函数来调整显示的布局,该函数格式为:
matplotlib.pyplot.tight_layout
(pad=1.08, h_pad=None, w_pad=None, rect=None)
所有的参数都是可选的,调用该函数时可省略所有的参数:
pad: 主窗口边缘和子图边缘间的间距,默认为1.08
h_pad, w_pad: 子图边缘之间的间距,默认为 pad_inches
rect: 一个矩形区域,如果设置这个值,则将所有的子图调整到这个矩形区域内。
一般调用为:plt.tight_layout() #自动调整subplot间的参数