学习笔记--Matplotlib

绘制图的基本内容

是不是感觉一幅图形要注意的地方很多很复杂~ 

但是,总体来说,在利用 Matplotlib 绘制图形时,主要图形元素包括画布(figure)、坐标图形(axes)、轴(axis)和艺术对象(aritist)

这些是一幅图形不可或缺的元素。

在这里将简要用书面的语言介绍以上几个元素。

画布 (figure)

包含其他多个图形元素。它既可以代表图形本身进行图的绘制,又可以被划分为多个子区域,用于单独图形类型的 (子图)绘制。用户可以在画布(figure)中设置画布大小(figsize)、分辨率(dpi)和背景颜色等其他参数。

坐标图形 (axes)

也称为子图。作为 Matplotlib 的绘图核心,它主要为绘图数据提供展示区域,同时包括组成图的众多艺术对象 (artist)。在大多数情况下,一个画布 (figure) 对象中包含一个子图区域,子图区域由上、下、左、右 4 个轴脊以及其他构成子图的组成元素组成。

轴 (axis)

数据轴对象,即坐标轴线。每个轴对象都含有位置(locator)对象和格式(formatter)对象,它们分别用于控制坐标轴刻度的位置和格式。

刻度 (tick)

即刻度对象。每个坐标图形都有水平方向的横轴(X axis)对象和垂直方向的纵轴(Y axis)对象。每个坐标轴上含有刻度对象。刻度对象包括主刻度(Major tick)、次刻度(Minor tick)、主刻度标签(Major tick label)和次刻度标签(Minor tick label)。

那么怎么用通常的话语来理解python中利用Matplotlib来做图的过程呢

在下面这篇知乎专栏中,我的同学(大佬)做出了如下的解释,我认为写的很通俗易懂,故这里引用以下:

以生活中的情况作为例子,假设你现在突然灵感乍现,想要画个对比图(也就是要在图上画两张图),最后把画出来的图片给朋友分享,你会怎么弄呢?

  1. 拿出一张白纸(画图)和笔
  2. 将白纸对折(或者拿铅笔简单的画个线),形成两个区域(子图
  3. 在其中的一张子图上,你进行创作,比如画上横纵坐标,写上刻度,画出一条折线,在另一张子图上,也进行类似的创作
  4. 最后,将图片给朋友分享

那么类似的,在matplotlib我们怎样进行操作呢

  1. 创建一个fig(画布),相当于拿到了一张白纸,以后的创作将在这张白纸上进行
  2. 将这个图纸进行划分,形成多个子图(axes)。注:axes是axis的复数,但在matplotlib里面却有着截然不同的用法,axis是轴(属于内容部分),而axes作为子图进行使用
  3. 在每个子图上进行内容的继续创作
  4. 最后,将这个内容展示出来

2.Matplotlib入门 - 知乎 (zhihu.com)

以下就是利用Matplotlib绘制正弦曲线的例子:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 创建图像和子图
plt.figure(figsize=(8, 6))  # 创建一个图像,设置图像大小
plt.plot(x, y, label='正弦曲线', color='blue', linestyle='-', linewidth=2)  # 绘制曲线
plt.scatter(x[::10], y[::10], marker='o', color='red', label='样本点')  # 绘制散点

# 添加标题和标签
plt.title('正弦曲线示例', fontsize=16)  # 添加图像标题
plt.xlabel('X轴', fontsize=14)  # 添加X轴标签
plt.ylabel('Y轴', fontsize=14)  # 添加Y轴标签

# 添加图例
plt.legend(loc='upper right')  # 添加图例,指定位置

# 调整坐标轴范围
plt.xlim(0, 10)  # 设置X轴范围
plt.ylim(-1.5, 1.5)  # 设置Y轴范围

# 显示网格
plt.grid(True, linestyle='--', alpha=0.7)  # 显示网格线,设置线型和透明度

# 显示图像
plt.show()  # 在屏幕上显示图像

其中

import matplotlib.pyplot as plt: 导入matplotlib库中的绘图函数,并将其命名为plt,以方便调用。

import numpy as np: 导入numpy库并将其命名为np,以便生成示例数据。

x = np.linspace(0, 10, 100): 使用np.linspace生成一个包含100个数据点的等间隔数组。

y = np.sin(x): 使用numpy的sin函数计算x的正弦值,生成y的数据。

plt.figure(figsize=(8, 6)): 创建一个图像,设置图像的大小为8x6英寸。

plt.plot(x, y, label='正弦曲线', color='blue', linestyle='-', linewidth=2): 绘制正弦曲线,设置标签、颜色、线型和线宽。

plt.scatter(x[::10], y[::10], marker='o', color='red', label='样本点'): 绘制散点图,每隔10个点绘制一个散点,设置标记样式和颜色。

plt.title('正弦曲线示例', fontsize=16): 添加图像标题,设置标题内容和字体大小。

plt.xlabel('X轴', fontsize=14): 添加X轴标签,设置标签内容和字体大小。

plt.ylabel('Y轴', fontsize=14): 添加Y轴标签,设置标签内容和字体大小。

plt.legend(loc='upper right'): 添加图例,位置位于右上角。

plt.xlim(0, 10): 设置X轴范围为0到10。

plt.ylim(-1.5, 1.5): 设置Y轴范围为-1.5到1.5。

plt.grid(True, linestyle='--', alpha=0.7): 显示网格线,设置线型为虚线,透明度为0.7。

plt.show(): 显示绘制的图像。

这里没有用到子图绘制,但是比较重要的部分就在于多子图的绘制

多子图的绘制

创建子图的方式有特别多种

注:在子图中,每个子图对应的数字,是从上到下,从左到右计数的

接下来我们介绍创建子图的几种方法(因为是阅读图书,代码部分为了方便就直接截图显示):

如果你需要创建子图,要利用以下代码:

axes=plt.subplot(a,b,c)

其中,a、b代表你会把这张画布分成a行b列,而c代表你把这个图放的位置对应的数字

比如subplot(222),意味着把图分成四行四列,然后放在从上到下,从左到右第二个的位子

subplot()函数

Matplotlib 提供的 subplot() 函数可以对当前画布对象添加单个子图,且每次添加子图都会规定其位置顺序。

书上示例代码:

示例结果如图:

add_subplot()函数

Matplotlib 中的 add_subplot() 函数的使用方法和 subplot() 函数类似,不同之处是,add_subplot() 函数先产生 figure 对象,然后在该对象的基础上依次添加子图

subplots()函数

该函数的第 1 个参数 nrows 表示绘制子图的行数,第 2 个参数 ncols 表示绘制子图的列数,行数与列数的乘积即绘制的总子图数,第 3 个参数 sharex 可以用来设定是否共享 X 轴,第 4个参数 sharey 可以用来设定是否共享 Y 轴。该函数会返回一个坐标数组对象,该对象用于每个子图的单独绘制。

 示例代码:

 绘制结果:

 axex()函数

Matplotlib 中的 axes() 函数的主要功能是为当前画布 (figure) 对象添加坐标图形 (axes) 对象,使其成为当前的坐标图形(axes)对象。此外,还需要提供 rect 参数(一个四元组:left、 bottom、width、height)。axes() 函数常见用法包括对当前画布 (figure) 对象中的坐标图形 (axes) 对象添加颜色和大小映射等,或者在已有的坐标图形 (axes) 对象上添加另一个坐标图形 (axes) 对象。

 绘制结果如下:

 subplot2grid()函数

 该函数的第 1 个参数 shape 规定了的网格的行数和列数,第 2 个参数 location 决定了子图在网格内的行号和列号,第 3 个参数为 rowspan 或 colspan,它们分别规定了每个子图向下跨27越的行数和向右跨越的列数,也就实现了大小不一的子图的绘制。

绘制结果:

 

gridspec.GridSpec()函数

 

其中,参数 nrows 表示网格中的行数;参数 ncols 表示网格中的列数;left、bottom、right和 top 是可选参数,用于将子图的范围定义为图形宽度或高度的一部分。

 绘制结果:

 subplot_mosaic()函数

 subplot_mosaic() 函数绘制子图的最大特点是它可利用 mosaic 参数设置特定字符串符号(重复次数、顺序等)来进行子图的视觉布局。

绘制结果:

 Tips:子图的数量尽量控制在四个以内,否则即增加了代码量,又会出现一些标题字体的显示错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值