该拒绝的时候,请学会拒绝!
Python-matplotlib制图03-matplotlib的图形对象结构
- 前言
- 1. 概述
- 2. 版本
- 2.1 山东青岛,2021年4月29日,Version 1
- 3. 参考资料
- 一、matplotlib的图形对象结构
- 二、Figure和Axes创建示例
- 1. plt.figure()创建Figure对象,Figure.add_subplot()创建Axes对象
- 2. plt.figure()创建Figure对象,Figure.add_axes()创建Axes对象
- 3. plt.figure()创建Figure对象,plt.subplot()创建Axes对象
- 4. plt.subplots()同时创建Figure对象和Axes对象
- 三、总结
前言
- 了解matplotlib的图形对象设计逻辑,使程序制图时更具条理性和逻辑性
[1] 一张图看懂matplotlib的绘图结构 [2] Python数据可视化之美:专业图表绘制指南
一、matplotlib的图形对象结构
matplotlib的图形对象结构如图1所示。以下对图形对象进行简要说明。
- Figure是图形对象的最基础结构,matplotlib的所有其他图形对象都是在Figure基础上创建的,可以理解成画画的桌子,Figure对象至少包含一个子图对象(即Axes对象)。
- Axes是仅次于Figure的图形对象结构,是子图对象,可以理解成桌子上用于绘图的纸,当我们需要在一个图形对象上创建多个子图对象时,就需要创建一个Axes。
- Axis是坐标轴对象,主要用于对图形坐标轴的设置。
图1. matplotlib的图形对象结构
二、Figure和Axes创建示例
代码如下:
"""
1. 程序目的
(1) 创建matplotlib的Figure对象
(2) 创建matplotlib的Axes对象
2. 版本
2.1 山东青岛 2021年4月29日 Version 1
"""
# 1. matplotlib包的导入
import matplotlib.pyplot as plt
# 2. 基于plt.figure创建Figure对象
fig = plt.figure(figsize=(5,5),dpi=300) # 图片大小5inch*5inch,分辨率:300dpi
# 3. 在创建的图形对象基础上增加Axes子图对象
ax_1 = fig.add_subplot(221) # 2行2列第一个位置
ax_2 = fig.add_subplot(222) # 2行2列第二个位置
ax_3 = fig.add_subplot(212) # 2行1列第二个位置
上述程序在一个Figure图形对象上,创建了3个Axes子图对象,结果如下:
代码如下:
"""
1. 程序目的
(1) 创建matplotlib的Figure对象
(2) 创建matplotlib的Axes对象
2. 版本
2.1 山东青岛 2021年4月29日 Version 1
"""
# 1. matplotlib包的导入
import matplotlib.pyplot as plt
# 2. 基于plt.figure创建Figure对象
fig = plt.figure(figsize=(2,2),dpi=300) # 图片大小5inch*5inch,分辨率:300dpi
# 3. 在创建的图形对象基础上运用fig.add_axes()增加Axes子图对象
ax_1 = fig.add_axes([0.1,0.2,1.8,1.8]) # 在Figure中的x=0.1,y=0.2的位置创建1个长为1.8,宽为1.8的axes对象。
ax_2 = fig.add_axes([1.35,1.4,0.5,0.5])
上述程序在一个Figure图形对象上,创建了2个Axes子图对象,结果如下图所示。可以发现fig.add_axes()方法可以在一个子图对象之上创建新的子图,这是由于其可以指定子图对象创建的位置,用这种方法创建子图对象时需要注意不同子图对象创建语句的顺序。
代码如下:
# 1. 包的导入
import numpy as np
import matplotlib.pyplot as plt
# 2. 函数预定义
def f(t):
return np.exp(-t)*np.cos(2*np.pi*t)
t1 = np.arange(0.0,5.0,0.1)
t2 = np.arange(0.0,5.0,0.02)
# 3. 基于plt.figure创建Figure对象
fig = plt.figure(dpi=300) # 图片大小5inch*5inch,分辨率:300dpi
# 4. 在创建的图形对象基础上运用plt.subplot()创建Axes子图对象
ax_1 = plt.subplot(211) # plt.subplot()创建Axes
ax_1.plot(t1,f(t1),'bo',t2,f(t2),'k')
ax_2 = plt.subplot(212)
ax_2.plot(t2,np.cos(2*np.pi*t2),'r--')
运行结果如下:
代码如下:
# 1. 包的导入
import numpy as np
import matplotlib.pyplot as plt
# 2. 创建数据
data = np.random.randn(2,100)
# 3. plt.subplots同时创建Figure和Axes,注意Figure只有一个,Axes会依据参数确定创建的数目
fig,axs = plt.subplots(2,2,figsize=(5,5))
axs[0,0].hist(data[0])
axs[1,0].scatter(data[0],data[1])
axs[0,1].plot(data[0],data[1])
axs[1,1].hist2d(data[0],data[1])
plt.show()
运行结果如下:
三、总结
- plt.figure()可以创建Figure对象,在创建完成Figure对象的基础上,可以利用Figure.add_subplot()和Figure.add_axes()两种方法创建Axes子图对象。
- 在运用plt.figure()创建完Figure之后,可以利用plt.subplot()创建Axes。
- plt.subplots()可以同时创建Figure和Axes,其中Figure每次只能创建一个,Axes的创建数目和plt.subplots()的参数有关。