一、概述
在matplotlib中,整个图像
为一个Figure
对象。在Figure对象中可以包含一个或者多个Axes
对象。每个Axes(ax)对象都是一个拥有自己坐标系统的绘图区域。所属关系如下:
下面以一个直线图来详解图像内部各个组件内容:
其中:title为图像标题,Axis为坐标轴, Label为坐标轴标注,Tick为刻度线,Tick Label为刻度注释。各个对象关系可以梳理成以下内容:
图像中所有对象均来自于Artist
的基类。
二、Artist 对象
Artists分为简单类型和容器类型两种。简单类型的Artists为标准的绘图元件,例如Line2D、 Rectangle、 Text、AxesImage 等等。而容器类型则可以包含许多简单类型的Artists,使它们组织成一个整体,例如Axis、 Axes、Figure等。
举一个建立简单Artist对象的过程哈,直接上代码:
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(1) # 创建了一个figure对象;
# figure对象的add_axes()可以在其中创建一个axes对象,
# add_axes()的参数为一个形如[left, bottom, width, height]的列表,取值范围在0与1之间;
# 我们把它放在了figure图形的上半部分,对应参数分别为:left, bottom, width, height;
ax = fig.add_axes([0.1, 0.5, 0.8, 0.5])
ax.set_xlabel('time') # 用axes对象的set_xlabel函数来设置它的xlabel
line =ax.plot(range(5))[0] # 用axes对象的plot()进行绘图,它返回一个Line2D的对象;
line.set_color('r') # 再调用Line2D的对象的set_color函数设置color的属性;
plt.show()
三、Figure 容器
在构成图表的各种Artist对象中,最上层的Artist对象是Figure。我们可以调用add_subplot()与add_axes()方法向图表中添加子图,它们分加到figure的axes的属性列表中。add_subplot()与add_axes()返回新创建的axes对象,分别为axesSuubplot与axes, axesSuubplot为 axes的派生类。另外,可以通过delaxes()方法来删除哦;
figure对象可以有自己的简单的artist对象。
下面列出Figure对象中包含的其他Artist对象的属性:
axes:Axes对象列表;
patch:作为背景的Rectangle对象;
images:FigureImage对象列表,用于显示图像;
legends:Legend 对象列表,用于显示图示;
lines:Line2D对象列表;
patches:Patch对象列表;
texts:Text 对象列表,用于显示文字;
# 使用figure对象绘制直线
from matplotlib.lines import Line2D
import matplotlib.pyplot as plt
fig = plt.figure()
line1 = Line2D([0,1],[0,1], transform=fig.transFigure, figure=fig, color="r")
line2 = Line2D([0,1],[1,0], transform=fig.transFigure, figure=fig, color="b")
fig.lines.extend([line1, line2])
fig.show()
四、Axes 容器
它是整个matplotlib的核心,它包含了组成图表的众多的artist对象。并且有很多方法。我们常用的Line2D啦,Xaxis,YAxis等都是它的属性哦;可以通过这个对象的属性来设置坐标轴的label啦,范围啦等之类的。干脆直接用plt.getp()查看它的属性,然后通过set_属性名()函数来设置就好啦。
五、Axis 容器
axis容器包括了坐标轴上的刻度线、刻度标签等、坐标网络等内容。
对于坐标轴上的刻度相关的知识,它是这么分的:首先是major_ticks()和minor_ticks(), 然后呢,每个刻度又包括刻度线(ticklines)、刻度标签(ticklabels)、刻度位置(ticklocs)。本来呢,axis应该刻度,然后呢,刻度再包含那三个,但是呢,为了方便,axis就都包含了。其实也是有点交叉吧。上面的axes也会交叉包含它所包含对象的对象的。
from matplotlib.lines import Line2D
import matplotlib.pyplot as plt
# 通过axis来更改坐标轴
plt.plot([1,2,3],[4,5,6])
# gca()获取当前的axes绘图区域,调用gcf()来获得当前的figure
axis = plt.gca().xaxis
axis.get_ticklocs() # 得到刻度位置;
axis.get_ticklabels() # 得到刻度标签;
axis.get_ticklines() # 得到刻度线;
axis.get_ticklines(minor = True) # 得到次刻度线; 举个例子:就像我们的尺子上的厘米的为主刻度线,毫米的为次刻度线;
for label in axis.get_ticklabels():
label.set_color('red') # 设置每个刻度标签的颜色;
label.set_rotation(45) # 旋转45度;
label.set_fontsize(16) # 设置字体大小;
for line in axis.get_ticklines():
line.set_color('green')
line.set_markersize(15) # 设置刻度线的长短;
line.set_markeredgewidth(3) # 设置线的粗细
plt.show()
pyplot函数提供了两个绘制文字的函数:text()和figtext()。它们分别调用了当前的Axes对象与当前的Figure对象的text()方法进行绘制文字。text()默认在数字坐标系(就是axes在的坐标系,用坐标轴的数字来表示坐标)中画, figtext()默认在图表坐标系(就是figure在图表中啦,坐标范围从0 到 1 )中画,我们可能通过trransform参数进行坐标系的转换。
plt.text(1, 1, ‘hello,world’, color = ‘bule’) #还可以写更多参数的;
plt.figtexe(0.1, 0.8 ,”i am in figure’, color = ‘green’)