该拒绝的时候,请学会拒绝!


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所示。以下对图形对象进行简要说明。

  1. Figure是图形对象的最基础结构,matplotlib的所有其他图形对象都是在Figure基础上创建的,可以理解成画画的桌子,Figure对象至少包含一个子图对象(即Axes对象)。
  2. Axes是仅次于Figure的图形对象结构,是子图对象,可以理解成桌子上用于绘图的纸,当我们需要在一个图形对象上创建多个子图对象时,就需要创建一个Axes。
  3. 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子图对象,结果如下:

python中创建画布的函数 python创建绘图对象_对象创建

  代码如下:

"""
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()方法可以在一个子图对象之上创建新的子图,这是由于其可以指定子图对象创建的位置,用这种方法创建子图对象时需要注意不同子图对象创建语句的顺序

python中创建画布的函数 python创建绘图对象_对象创建_02

  代码如下:

# 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--')

  运行结果如下:

python中创建画布的函数 python创建绘图对象_python中创建画布的函数_03

  代码如下:

# 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()

  运行结果如下:

python中创建画布的函数 python创建绘图对象_对象创建_04


三、总结
  1. plt.figure()可以创建Figure对象,在创建完成Figure对象的基础上,可以利用Figure.add_subplot()和Figure.add_axes()两种方法创建Axes子图对象。
  2. 在运用plt.figure()创建完Figure之后,可以利用plt.subplot()创建Axes。
  3. plt.subplots()可以同时创建Figure和Axes,其中Figure每次只能创建一个,Axes的创建数目和plt.subplots()的参数有关。