子图的使用
目录
一、多子图
plt.subplots(row,col,constrained_layout=True)------返回的值为元组(画布,轴对象的数组)
constrained_layout:对多子图设置启用约束布局
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['figure.figsize']=(6,4)
plt.rcParams['figure.dpi']=100
plt.rcParams['figure.facecolor']='#DCDCDC'
plt.rcParams['font.sans-serif']='SimHei'
# 对约束布局启用
plt.rcParams['figure.constrained_layout.use']=True
# 通过调用subplots返回元组,分别赋值给fig,axarr
fig,axarr=plt.subplots(2,2,constrained_layout=True,sharex=True)
# 设置画布的背景色,设置画布的大小
fig.set_facecolor('#66CDAA')
# 在第三个单元格中进行作图,y=x**3
plt.title('title1')
axarr[1,0].plot(np.arange(0,10)**3)
#plt.title('title2')
输出结果:
二、多子图 add_axes
在画布中添加多个子图,add_axes()
1.add_axes():添加区域
Matplotlib定义了一个axes类(轴域类),该类的对象被称为axes对象(即轴域对象),它指定了一个有数值范围限制的绘图区域。在一个给定的画布((figure)中可以包含多个axes对象,但是同一个axes对象只能在一个画布中使用。
2D绘图区域(axes)包含两个轴(axis)对象
语法:
add_axes(rect, projection=None, polar=False, **kwargs)
·该方法用来生成一个axes轴域对象,对象的位置由参数rect决定
rect 是位置参数,接受一个由4个元素组成的浮点数列表,形如[left, bottom, width, height),它表示添加到画布中的矩形域的左下角坐标(x, y),以及宽度和高度。
rect:[left, bottom, width, height],左下角:0,0 右上角:1,1,
水平方向(宽):0-1,left-width left+width<=1
垂直方向:(高):0-1,bottom-height bottom+height<=1
import matplotlib.pyplot as plt
import numpy as np
# 创建指定大小和分辨率的图形对象
fig=plt.figure('f1',figsize=(6,4),dpi=100,linewidth=2,edgecolor='#FFA54F',facecolor='#CDBA96',frameon=True)
# 在画布中添加多个子图(坐标轴)
fig=plt.figure('f1',figsize=(6,4),dpi=100,linewidth=2,edgecolor='#FFA54F',facecolor='#CDBA96',frameon=True)
ax1=fig.add_axes([0,0,1,1],fc='#CDCDB4')
ax2=fig.add_axes([0.2,0.2,0.5,0.5],fc='#FFFFE0')
#输出结果如图1
# 在画布中添加多个子图(坐标轴),(left,bottom,width,height)
fig=plt.figure('f1',figsize=(6,4),dpi=100,linewidth=2,edgecolor='#FFA54F',facecolor='#CDBA96',frameon=True)
# 创建左下角子图
ax1=fig.add_axes([0,0,0.5,0.5],fc='#CDCDB4')
# 创建右下角子图
ax2=fig.add_axes([0.6,0,0.5,0.5],fc='#FFFFE0')
# 创建左上角子图
ax3=fig.add_axes([0,0.6,0.5,0.5],fc='#FFFFE0')
# 创建右上角子图
ax3=fig.add_axes([0.6,0.6,0.5,0.5],fc='#CDCDB4')
输出结果如图2
输出结果:
图1
图2
三、自定义子图
实现自定义单子图
plt.subplot2grid(shape,col,rowspan,colspan)
shape:(行,列),将画布划分为几行几列的区域
col:(行索引,列索引)确定选择的作图区域
rowspan:按照行进行合并
colspan:按照列进行合并
实现案例:
- 将第一行的第一列和第二列合并,作图气温折线图
- 第二行的第一列实现余弦图
- 在第二行的第二列实现正弦图
import numpy as np
import matplotlib.pyplot as plt
#先设定画布的尺寸和背景色
plt.rcParams['figure.figsize']=(8,6)
plt.rcParams['figure.dpi']=100
plt.rcParams['figure.facecolor']='#DCDCDC'
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
#准备数据,定义单子图作图
# 气温数据
day=np.array(['9月28日','9月29日','9月30日','10月1日','10月2日','10月3日','10月4日'])
y_gao=np.array([22,26,27,28,28,28,24])
y_di=np.array([14,16,18,18,19,18,19])
# 余弦曲线数据
data=np.linspace(-np.pi,np.pi)
y_cos=np.cos(data)
# 正弦曲线数据
y_sin=np.sin(data)
# 气温作图
plt.subplot2grid((2,2),(0,0),colspan=2,title='最近一周气温图')
plt.plot(day,y_gao)
plt.plot(day,y_di)
# 余弦线作图
plt.subplot2grid((2,2),(1,0),title='余弦线作图')
plt.plot(data,y_cos,lw=3,color='c',ls='--')
# 正弦线作图
plt.subplot2grid((2,2),(1,1),title='正弦线作图')
plt.plot(data,y_sin,marker='o',ms=5,mfc='r')
# 设置紧密布局
plt.tight_layout()
输出结果: