文章目录
- 一、简介
- 二、安装 + 调用
- 三、绘图参数设置
- 四、2D图形化显示
- 4.1、参数详解
- 4.1.1、(*args, **kwargs)用法
- 4.1.2、plt.title():添加标题
- 4.1.3、plt.xlabel():添加x轴标签
- 4.1.4、plt.xlim():设置x轴刻度的范围
- 4.1.5、plt.xticks():设置x轴刻度的位置和标签
- 4.1.6、plt.axis():打开或关闭坐标轴的显示 + 设置坐标轴的显示范围
- 4.1.6、plt.legend():添加图例
- 4.1.7、plt.grid():添加网格
- 4.1.8、plt.colorbar():添加颜色条
- 4.1.9、plt.savafig():保存图像
- 4.1.10、plt.show():显示图像
- 4.1.11、plt.pause():延迟一段时间后关闭图窗
- 4.1.12、 plt.close():关闭图窗
- 4.1.13、综合实战
- 4.2、绘图函数(列举21种)
- 4.3、项目实战
- 五、3D图形化显示
- 参考文献
一、简介
matplotlib官网:https://matplotlib.org/
Matplotlib 是一个用于创建二维图形和图表的 Python 库。它是一个功能强大且广泛使用的数据可视化工具,特别适用于数据分析、科学计算、工程绘图和数据可视化等领域。
- 最初目的:用于可视化癫痫病人的脑皮层电图相关的信号。
- 发展历程:由 John D. Hunter 在 2002 年开始编写,在 2003 年发布了第一个版本。matplotlib 是一个社区项目,由其用户维护。
- 支持跨平台运行,可以配合 Python GUI 工具包(比如: PyQt,WxPython、Tkinter)在应用程序中嵌入图形。并支持以脚本的形式在 Python、IPython Shell、Jupyter Notebook 以及 Web 应用的服务器中使用。
- 提供了面向对象绘图的 API 接口,包括 2D 绘图库,以及部分 3D 绘图接口。可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。
二、安装 + 调用
matplotlib 是 Python 的第三方绘图库,故需要安装后使用。
- 使用 pip 安装 matplotlib ,打开命令行或终端,输入以下命令::
pip install matplotlib
- 导入 matplotlib 库中 pyplot 模块的命令:
import matplotlib.pyplot as plt
pyplot 是 matplotlib 的一个子模块,提供了一种类似于 MATLAB 的命令式接口,方便用户创建和修改图形。它包含了许多用于绘制图形的函数,用户可以使用这些函数设置图形的属性、添加标题、标签、图例等。
三、绘图参数设置
3.1、绘图标记
3.1.1、标记点的类型(marker=‘*’)
使用关键字参数 marker 来设置点类型。RUNOOB.COM:绘图标记
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
标记符 | '.' | ',' | 'o' | '*' | 'v' | '^' | '<' | '>' | '1' | '2' | '3' | '4' | 's' | 'p' | 'h' | 'H' | '+' | 'P' | 'x' | 'X' | 'D' | 'd' | '_' | I |
说明 | Point | Pixel | Circle | star | triangle_down | triangle_up | triangle_left | triangle_right | tri_down | tri_up | tri_left | tri_right | Square | Pentagon | hexagon1 | hexagon2 | Plus | Plus (filled) | x | X (filled) | Diamond | Diamond (thin) | Hline | Vline |
3.1.2、标记点的大小、内部颜色、边框颜色(ms=10、mfc=‘r’、mec=‘g’)
使用关键字参数 markersize、markerfacecolor、markeredgecolor 来设置标记大小、内部颜色、边框颜色。
- markersize,简写为 ms:定义标记的大小。
- markerfacecolor,简写为 mfc:定义标记的内部颜色。
- markeredgecolor,简写为 mec:定义标记的边框颜色。
3.2、绘图线条
3.2.1、线条的类型(linestyle=‘–’)
使用关键字参数 linestyle 或 ls 来设置线类型。
序号 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
标记符 | '-' | '--' | '-.' | ':' |
说明 | 实线 | 破折线 | 点划线 | 虚线 |
3.2.2、线条的宽度(linewidth=‘20.5’)
使用关键字参数 linewidth 或 lw 来设置线宽。(字符串格式)可以输入浮点数。
3.2.3、线条的颜色(color=‘r’)
使用关键字参数 color 或 c 来设置颜色。
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
标记符 | 'b' | 'g' | 'r' | 'c' | 'm' | 'y' | 'k' | 'w' |
说明 | 蓝色Blue | 绿色Green | 红色Red | 青色Cyan | 品红Magenta | 黄色Yellow | 黑色Black | 白色White |
四、2D图形化显示
4.1、参数详解
序号 | 函数 | 说明 |
---|---|---|
1 | plt.title() | 添加标题 |
2 | plt.xlabel() | 添加x轴标签 |
3 | plt.ylabel() | 添加y轴标签 |
4 | plt.xlim() | 设置x轴刻度的范围 |
5 | plt.ylim() | 设置y轴刻度的范围 |
6 | plt.xticks() | 设置x轴刻度的位置和标签 |
7 | plt.yticks() | 设置y轴刻度的位置和标签 |
8 | plt.legend() | 添加图例 |
9 | plt.grid() | 添加网格 |
10 | plt.imshow() | 显示网格 |
11 | plt.grid() | 添加网格 |
12 | plt.colorbar() | 添加颜色条 |
13 | plt.savafig() | 保存图像 |
14 | plt.pause() | 延迟一段时间后关闭图窗 |
15 | plt.close() | 关闭图窗 |
4.1.1、(*args, **kwargs)用法
【Python】*args 和 **kwargs 的用法【最全详解】
python传递参数的方式有两种:
- args(positional arguments,位置参数)
- kwargs(keyword arguments,关键字参数)
* args
表示将不定数量的参数传递给一个函数, 本质上是一个元祖tuple
。** kwargs
表示将不定长度的【键值对key-value】作为参数传递给一个函数, 本质上是一个字典dict
。
不定的意思是: 预先并不知道,函数使用者会传递多少个参数给你,所在在这个场景下使用这两个关键字。
4.1.2、plt.title():添加标题
"""
# 函数功能:设置图形的标题。
# 函数说明:plt.title(label, fontdict=None, loc='center', pad=None, **kwargs)
# 参数说明:
# label:要设置的标题文本。
# fontdict: 可选,字典格式的参数,用于设置字体属性,如大小、颜色等。
# loc: 可选,标题的位置,取值包括 'left'、'center'(默认)和 'right'。
# pad: 可选,标题与图形上边缘的距离,默认为 5。
# **kwargs: 其他可选参数,如字体样式、颜色等。
# 返回值:
# 无返回值。
# 功能描述:
# - plt.title 用于为图形添加描述性的标题,帮助观众理解图形内容。
# - 通过调整字体和位置,用户可以根据需求自定义标题的外观。
# - 此函数在数据可视化中非常重要,有助于提高图形的表达能力。
"""
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title('Sine Wave')
plt.show()
4.1.3、plt.xlabel():添加x轴标签
"""
# 函数功能:设置 x 轴的标签。
# 函数说明:plt.xlabel(xlabel, fontdict=None, labelpad=None, **kwargs)
# 参数说明:
# xlabel:要设置的 x 轴标签文本。
# fontdict: 可选,字典格式的参数,用于设置字体属性,如大小、颜色等。
# labelpad: 可选,标签与 x 轴的距离,默认为 4。
# **kwargs: 其他可选参数,如字体样式、颜色等。
# 返回值:
# 无返回值。
# 功能描述:
# - plt.xlabel 用于为 x 轴添加描述性的标签,帮助观众理解 x 轴所表示的内容。
# - 通过调整字体和位置,用户可以根据需求自定义标签的外观。
# - 此函数在数据可视化中非常重要,有助于提高图形的表达能力。
"""
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.xlabel('Time (seconds)')
plt.ylabel('Time (seconds)')
plt.show()
4.1.4、plt.xlim():设置x轴刻度的范围
"""
# 函数功能:设置 x 轴的显示范围。
# 函数说明:plt.xlim(left=None, right=None)
# 参数说明:
# left:可选,指定 x 轴的最小值。如果未提供,则不更改最小值。
# right:可选,指定 x 轴的最大值。如果未提供,则不更改最大值。
# 返回值:
# 返回当前 x 轴的最小值和最大值。
# 功能描述:
# - plt.xlim 用于控制 x 轴的范围,确保图形的特定部分被强调或清晰展示。
# - 通过设置范围,可以更好地观察数据的趋势和变化,尤其在处理异常值时。
# - 此函数在数据可视化中非常实用,帮助用户聚焦于感兴趣的数据区域。
"""
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.xlim(0, 20) # 10
plt.ylim(-1, 1)
plt.show()
4.1.5、plt.xticks():设置x轴刻度的位置和标签
"""
# 函数功能:设置或获取 x 轴刻度及其标签。
# 函数说明:plt.xticks(ticks=None, labels=None, **kwargs)
# 参数说明:
# ticks:可选,指定 x 轴刻度的位置,可以是一个列表或数组。
# labels:可选,指定与 ticks 位置相对应的刻度标签。如果提供,则必须与 ticks 长度相同。
# **kwargs:其他可选参数,如字体大小、颜色等,用于自定义刻度标签的外观。
# 返回值:
# 如果没有参数,则返回当前 x 轴的刻度位置和标签。
# 功能描述:
# - plt.xticks 用于控制 x 轴的刻度和标签,使得图形的可读性更强。
# - 可以自定义刻度的位置和对应的标签,适用于展示特定数据或类别。
# - 此函数常用于数据可视化,帮助用户更好地理解图形的意义。
"""
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title('Sine Wave')
plt.xticks(ticks=[0, 2, 4, 6, 8, 10], labels=['Zero', 'Two', 'Four', 'Six', 'Eight', 'Ten'])
plt.show()
4.1.6、plt.axis():打开或关闭坐标轴的显示 + 设置坐标轴的显示范围
"""
# 函数功能:设置或获取当前坐标轴的属性。
# 函数说明:plt.axis(*args)
# 参数说明:
# *args:可以是以下几种形式:
# - 'on' 或 'off':打开或关闭坐标轴的显示。
# - [xmin, xmax, ymin, ymax]:设置坐标轴的显示范围,分别为 x 轴和 y 轴的最小值和最大值。
# - 'equal':设置坐标轴比例相等,使得 x 和 y 的单位长度相同。
# - 'scaled':自动调整坐标轴,使得显示范围比例相同。
# 返回值:
# 如果没有参数,则返回当前坐标轴的属性信息。
# 功能描述:
# - plt.axis 用于控制图像的坐标轴显示,包括范围和可见性。
# - 通过调整坐标轴的范围,可以更好地展示数据特征,尤其在处理特定区域时。
# - 此函数常用于数据可视化,帮助用户理解图形的比例和分布。
"""
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title('Sine Wave')
plt.axis([0, 10, -1, 1]) # 设置坐标轴范围
# plt.axis("off") # 关闭坐标轴的显示
plt.show()
4.1.6、plt.legend():添加图例
"""
# 函数功能:添加图例到图形中。
# 函数说明:plt.legend(handles=None, labels=None, loc='best', **kwargs)
# 参数说明:
# handles: 可选,图例中包含的艺术家(如线条、标记等)的列表。如果未提供,自动获取当前图形的艺术家。
# labels: 可选,与 handles 对应的标签文本列表。如果未提供,使用艺术家的标签。
# loc: 可选,图例的位置,取值包括 'best'(自动最佳位置)、'upper right'、'upper left'、'lower left'、'lower right' 等。
# **kwargs: 其他可选参数,用于自定义图例的外观,如字体大小、边框颜色等。
# 返回值:
# 返回一个包含图例对象的句柄。
# 功能描述:
# - plt.legend 用于在图形中添加图例,以帮助观众理解不同曲线或数据点的含义。
# - 通过设置图例的内容和位置,可以提高图形的可读性和专业性。
# - 此函数在数据可视化中非常重要,尤其是在多数据集的比较时。
"""
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label='Sine Wave')
plt.plot(x, y2, label='Cosine Wave')
plt.legend()
plt.show()
4.1.7、plt.grid():添加网格
"""
# 函数功能:在图形中添加网格线。
# 函数说明:plt.grid(b=None, which='major', axis='both', color='k', linestyle='-', linewidth=0.5, **kwargs)
# 参数说明:
# b:可选,布尔值,用于开启或关闭网格。如果为 True,则开启;如果为 False,则关闭。默认是 None,表示根据当前状态设置。
# which:可选,指定网格线的类型,取值包括 'major'(主网格线)、'minor'(次网格线)和 'both'(同时显示)。
# axis:可选,指定在哪个坐标轴添加网格,取值包括 'x'、'y' 和 'both'。
# color:可选,指定网格线的颜色,默认为 'k'(黑色)。
# linestyle:可选,指定网格线的样式,默认为 '-'(实线),可设置为 '--'(虚线)等。
# linewidth:可选,指定网格线的宽度,默认为 0.5。
# **kwargs:其他可选参数,用于自定义网格线的外观。
# 返回值:
# 无返回值。
# 功能描述:
# - plt.grid 用于在图形中添加网格线,提高数据可读性和图形美观性。
# - 通过控制网格线的类型、颜色和样式,可以根据需求自定义网格的外观。
# - 此函数在数据可视化中常用,帮助用户更好地理解图形数据。
"""
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.grid(True)
plt.show()
4.1.8、plt.colorbar():添加颜色条
plt.colorbar()用于在界面上显示当前的颜色条,若需要指定颜色条需要使用关键字参数
cmap
。
- 更多颜色条请看:颜色条类型
"""
# 函数功能:添加颜色条到图形中,用于表示数值与颜色之间的映射关系。
# 函数说明:plt.colorbar(mappable=None, cax=None, ax=None, use_gridspec=False, **kwargs)
# 参数说明:
# mappable: 可选,指定要与颜色条关联的图像或其他可映射对象(如散点图)。如果未提供,将从当前轴中查找。
# cax: 可选,指定用于绘制颜色条的轴。如果未提供,将自动创建一个颜色条轴。
# ax: 可选,指定颜色条要与之关联的轴。
# use_gridspec:可选,布尔值,指示是否使用 gridspec 布局来放置颜色条。
# **kwargs: 其他可选参数,用于自定义颜色条的外观,如标签、方向、位置等。
# 返回值:
# 返回一个颜色条对象。
# 功能描述:
# - plt.colorbar 用于在图形中添加颜色条,以帮助观众理解颜色与数值之间的关系。
# - 通过设置颜色条的位置和标签,可以提高图形的可读性。
# - 此函数在热图、散点图等可视化中非常常见,用于表示数据的分布和变化。
"""
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(10)
y = np.random.rand(10)
colors = np.random.rand(10) # 颜色数据
scatter = plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar(scatter)
plt.show()
4.1.9、plt.savafig():保存图像
注意:plt.savefig() 必须在 plt.show() 之前调用,因为plt.show()会显示图像并自动调用clear()清除缓存,导致保存的图像结果为空白图。
plt.savefig() 保存空白或显示错乱
"""
# 函数功能:保存当前图形到文件。
# 函数说明:plt.savefig(fname, dpi=None, facecolor='w', edgecolor='w', orientation='portrait',
# format=None, transparent=False, bbox_inches='tight', pad_inches=0.1, **kwargs)
# 参数说明:
# fname:保存的文件名,可以包括路径和扩展名(如 'figure.png')。
# dpi: 可选,图像的分辨率,默认为 None,表示使用当前图形的 DPI。
# facecolor: 可选,指定图形的背景颜色,默认为 'w'(白色)。
# edgecolor: 可选,指定图形边缘的颜色,默认为 'w'(白色)。
# orientation: 可选,指定图像的方向,取值包括 'portrait' 和 'landscape'。
# format: 可选,指定保存的文件格式(如 'png', 'pdf', 'svg'),如果未提供,将根据文件扩展名自动推断。
# transparent: 可选,布尔值,指定图像是否透明,默认为 False。
# bbox_inches: 可选,指定保存的区域,'tight' 表示尽量去除空白区域。
# pad_inches: 可选,指定边缘的填充,默认为 0.1。
# **kwargs: 其他可选参数,用于自定义保存的图像属性。
# 返回值:
# 无返回值。
# 功能描述:
# - plt.savefig 用于将当前图形保存为文件,以便于后续查看或分享。
# - 通过设置 DPI 和格式,用户可以控制保存图像的质量和类型。
# - 此函数在报告、论文和演示文稿中非常实用,帮助用户保存和分享可视化结果。
"""
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.savefig('sine_wave.png', dpi=300)
plt.show()
4.1.10、plt.show():显示图像
plt.show()默认block=True,因此程序会阻塞执行,暂停在当前行。
当plt.show(block=Fasle)或关闭图窗,程序才会继续执行。
"""
# 函数功能:显示当前图形窗口。
# 函数说明:plt.show(block=None)
# 参数说明:
# block:可选,布尔值,指示是否阻塞脚本的执行直到图形窗口关闭。
# 默认为 None,根据当前环境自动判断。
# 返回值:
# 无返回值。
# 功能描述:
# - plt.show 用于在屏幕上显示当前创建的图形,使用户能够查看绘制的结果。
# - 在交互模式下,该函数可能会在绘制每个图形后自动调用,但在非交互模式下,用户需手动调用该函数。
# - 此函数在数据可视化中至关重要,帮助用户可视化数据并进行分析。
"""
4.1.11、plt.pause():延迟一段时间后关闭图窗
在绘制图像后,调用该函数。将暂停程序,等待指定时间后,程序继续执行。
- 若没有plt.show(),将关闭图窗;
- 通常与plt.close()一起使用。
"""
函数功能:用于在绘制图像后暂停程序执行一段时间,以便用户观察图像
函数说明:plt.pause(interval=0.1)
参数说明:
interval 指定暂停的时间长度,单位为秒。默认0.1秒。
"""
4.1.12、 plt.close():关闭图窗
用于关闭当前的图形窗口,以释放系统资源。
4.1.13、综合实战
from matplotlib import pyplot as plt
import numpy as np
import math
# 创建 0~2π 的ndarray对象,步长为0.05。
x = np.arange(0, math.pi*2, 0.05) # 创建一维向量:x
y = np.sin(x) # 创建一维向量:y
p1, = plt.plot(x+1, y+1) # plot绘图1
p2, = plt.plot(x+2, y+2) # plot绘图2
p3, = plt.plot(x+3, y+3, marker='o', ms=5, color='b')
p4, = plt.plot(x+4, y+4, linestyle='--', linewidth='8', color='r')
plt.xlabel(xlabel="angle") # 添加x轴标签
plt.ylabel(ylabel="sin") # 添加y轴标签
plt.xlim(left=0, right=12) # 设置x轴刻度的范围
plt.ylim(bottom=-2, top=8) # 设置y轴刻度的范围
plt.xticks(rotation=-135) # 设置x轴刻度的位置和标签
plt.yticks(ticks=[1, 2, 3], labels=['A', 'B', 'C'], rotation=30)
# plt.axis("off") # 关闭坐标轴的显示
plt.legend([p1, p2, p3, p4], ["1", "2", '3', '4'], loc='upper left') # 添加图例
plt.title(label='sin wave') # 添加标题
plt.grid(True, which='both', axis='x') # 添加网格
plt.savefig('test.png') # 保存图像
plt.show(block=False) # 显示图像
plt.pause(2) # 暂停 2 秒以显示图像
plt.close() # 关闭图像
4.2、绘图函数(列举21种)
序号 | 函数 | 说明 | 函数 | 说明 |
---|---|---|---|---|
2 | plt.plot() | 绘制点和线 | plt.scatter() | 绘制散点图 |
4 | plt.bar() | 绘制条形图 | plt.barh() | 绘制横向条形图 |
6 | plt.hist() | 绘制直方图 | plt.pie() | 绘制饼图 |
8 | plt.psd() | 绘制功率谱密度图 | plt.specgram() | 绘制谱图 |
10 | plt.cohere() | 绘制相关性函数 | plt.boxplot() | 绘制箱形图 |
12 | plt.step() | 绘制步阶图 | plt.polar() | 绘制极坐标图 |
14 | plt.contour() | 绘制等值图 | plt.vlines() | 绘制垂直图 |
16 | plt.stem() | 绘制柴火图 | plt.plot_date() | 绘制数据日期 |
18 | plt.clabel() | 绘制轮廓图 | plt.hist2d() | 绘制2D直方图 |
20 | plt.quiverkey() | 绘制颤动图 | plt.stackplot() | 绘制堆积面积图 |
22 | plt.Violinplot() | 绘制小提琴图 |
4.3、项目实战
4.1.1、plt.plot():绘制2D点和线
import matplotlib.pyplot as plt
# 创建示例数据
x = [1, 2, 3, 4]
y = [5, 6, 7, 8]
plt.plot(x, y, 'r--', label='aa')
plt.xlabel('this is x')
plt.ylabel('this is y')
plt.title('this is a demo')
plt.legend()
plt.show()
"""
函数说明:plt.plot(x, y, '可选字符串类型', **kwargs)
输入参数:
x x轴数据(列表或数组)。可选参数:当没有x,则默认[0, 1, …, len(y)]递增
y y轴数据(列表或数组)
可选字符串类型 [marker标记类型, linestyle线类型]
**kwargs 如:[label, linewidth, color]
"""
4.1.2、plt.scatter():绘制2D散点图
import numpy as np
import matplotlib.pyplot as plt
# 设置随机数种子(若输入数字不变,则每次运行结果相同,否则不同)
np.random.seed(2)
# 创建示例数据
N = 20
x = np.random.rand(N)
y = np.random.rand(N)
plt.scatter(x, y, s=(50*np.random.rand(N))**2, c=np.random.rand(N), alpha=0.5)
plt.colorbar()
plt.show()
"""
函数说明:plt.scatter(x, y, s=20, c='b', marker='o', alpha=None, **kwargs)
输入参数:
x,y: 长度相同的数组
s: 点的大小。可选,默认20。若输入为数组,则数组中的每个参数是对应点的大小。
c: 点的颜色。可选,默认蓝色 'b'。若输入为数组,则数组中的每个参数是对应点的颜色。
marker: 标记点类型。可选,默认圆圈'o'。
linewidths: 标记点宽度。可选,默认None。
alpha: 透明度=[0, 1]。可选,默认None。
cmap: (1)Colormap,默认None,标量或者是颜色条colormap的一个名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是image.cmap。
(2)设置颜色条需要使用 cmap 参数,默认值为 'viridis',之后颜色值设置为 0 到 100 的数组。
norm: 亮度Normalize=[0, 1],默认None。只有 c 是一个浮点数的数组的时才使用。
vmin,vmax: 亮度设置,在 norm 参数存在时会忽略。
edgecolors: 颜色或颜色序列,默认'face',可选值有'face', 'none', None。
plotnonfinite: 布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。
**kwargs: 其他参数。
"""
4.1.3、plt.subplot():同时绘制多张图
方式一:
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
x = np.array([0, 6])
y = np.array([0, 100])
plt.subplot(2, 2, 1), plt.plot(x+10, y+10), plt.title("plot 1")
plt.subplot(2, 2, 2), plt.plot(x+15, y-10), plt.title("plot 2")
plt.subplot(2, 2, 3), plt.plot(x-10, y+20), plt.title("plot 3")
plt.subplot(2, 2, 4), plt.plot(x+30, y-20), plt.title("plot 4")
plt.show()
方式二:
import matplotlib.pyplot as plt
import numpy as np
# 读取多张图像
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
for ii in range(6):
plt.subplot(2, 3, ii+1)
plt.imshow(images[ii], 'gray')
plt.title(titles[ii])
plt.savefig('{}.png'.format(ii+1))
plt.show()
五、3D图形化显示
5.1、参数详解
序号 | 函数 | 说明 | 举例 |
---|---|---|---|
1 | ax.set_xlabel() | 设置x坐标轴的标签 | ax.set_xlabel('X Label') |
2 | ax.set_ylabel() | 设置y坐标轴的标签 | ax.set_ylabel('Y Label') |
3 | ax.set_zlabel() | 设置z坐标轴的标签 | ax.set_xlabel('Z Label') |
4 | set_xlim() | 设置 x 轴范围 | ax.set_xlim(-10, 10) |
5 | set_ylim() | 设置 y 轴范围 | ax.set_ylim(-10, 10) |
6 | set_zlim() | 设置 z 轴范围 | ax.set_zlim(-10, 10) |
7 | ax.set_title() | 添加标题 | ax.set_title('3D Plot') |
8 | ax.legend() | 添加图例 | ax.legend(['Line 1', 'Line 2']) |
9 | ax.view_init() | 设置三维图的视角,包括视点和仰角。 | ax.view_init(elev=30, azim=45) |
10 | ax.grid() | 在子图中添加网格。 | ax.grid(True) |
11 | ax.xaxis.grid() | 在子图中添加x轴网格。 | ax.xaxis.grid(True) |
12 | ax.yaxis.grid() | 在子图中添加y轴网格。 | ax.yaxis.grid(True) |
5.1.1、fig = plt.figure():创建图窗
"""
函数作用:创建图形窗口,并返回一个新的图形窗口对象。用于在窗口中添加子图以及设置图形窗口的各种属性。
函数说明:fig = plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, clear=False)
(1)num: 图形的编号。 如果为 None,则自动分配一个新的编号。
(2)figsize: 图形的尺寸。 以英寸为单位。一个包含两个浮点数的元组,分别表示宽度和高度。例如,figsize=(6, 4)。如果为 None,则使用默认尺寸。
(3)dpi: 图形的分辨率。 以每英寸的点数(DPI)表示。例如,dpi=100 表示每英寸有100个像素点。如果为 None,则使用默认分辨率。
(4)facecolor: 图形的背景颜色, 可以是字符串表示的颜色名(如 "white"、"red")或者一个表示颜色的元组。例如,facecolor='white' 表示白色背景。
(5)edgecolor: 图形的边框颜色。 可以是字符串表示的颜色名或者一个表示颜色的元组。
(6)frameon: 是否显示图形的边框。 若为 True,则显示边框;如果为 False,则不显示边框。
(7)clear: 是否清除图窗。 若为True,则在创建图形之前清除当前图形窗口。若为False,则将新图形添加到当前图形窗口。
备注:使用 fig 对象来管理和控制图形窗口,包括添加子图、保存图形、设置标题、调整大小等操作。
"""
5.1.1、ax = fig.add_subplot():创建子图
"""
函数作用:用于创建子图,允许在同一画布上创建多个子图
函数说明:ax = fig.add_subplot(nrows, ncols, index, **kwargs)
关键字参数:
(1)nrows: 子图区域的行数(即将整个图形窗口分为多少行)。
(2)ncols: 子图区域的列数(即将整个图形窗口分为多少列)。
(3)index: 子图的索引参数(用于确定当前子图在子图区域中的位置。)
索引从左上角的子图开始,从左往右,从上往下递增,从1开始计数。
(4)projection: 子图的投影类型,通常用于创建三维子图。例如,'3d' 表示三维投影。
(5)polar: 布尔值,表示是否创建极坐标子图,用于绘制极坐标图形。
"""
5.2、项目实战
5.2.1、ax.plot():绘制3D线图
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
z = np.sin(x) + np.cos(y)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(x, y, z)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('3D plot')
plt.show()
5.2.2、ax.scatter():绘制3D散点图
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('3D scatter')
plt.show()
5.2.3、ax.contour():绘制3D等高线图
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.contour(X, Y, Z, cmap='viridis')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('3D contour')
plt.show()
5.2.4、ax.plot_surface():绘制3D曲面图
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='hot')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('3D plot_surface')
plt.show()
5.2.5、绘制柱状图
5.2.5.1、ax.bar():绘制二维柱状图
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 8, 3, 4, 5])
fig = plt.figure()
ax = fig.add_subplot()
bars = ax.bar(x, y, color=['r', 'g', 'b', 'y', 'c'])
# 在每个柱形上添加标签
for bar in bars:
yval = bar.get_height()
ax.text(bar.get_x() + bar.get_width()/2, yval, round(yval, 2), ha='center', va='bottom')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_title('2D bar')
plt.show()
5.2.5.2、ax.bar3d():绘制三维柱状图
import matplotlib.pyplot as plt
# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]
z = [0, 0, 0, 0, 0] # 柱子的起始位置
dx = dy = [0.5, 0.5, 0.5, 0.5, 0.5] # 柱子的宽度
dz = [10, 15, 13, 18, 20] # 柱子的高度
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.bar3d(x, y, z, dx, dy, dz)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('3D bar3d')
plt.show()
5.2.5.3、ax.bar3d():延伸示例
import numpy as np
import matplotlib.pyplot as plt
# (1)创建一个大立方体
large_cube = np.arange(512).reshape(8, 8, 8)
# (2)创建一个三维图形
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# (3)遍历大立方体
cut_shape = (2, 2, 2) # 指定切割的长宽高
for i in range(0, large_cube.shape[0], cut_shape[0]):
for j in range(0, large_cube.shape[1], cut_shape[1]):
for k in range(0, large_cube.shape[2], cut_shape[2]):
subcube = large_cube[i:i + cut_shape[0], j:j + cut_shape[1], k:k + cut_shape[2]] # 切割大立方体获得小立方体
left_coords = (i, j, k) # 获取小立方体的左上角坐标
right_coords = (i + subcube.shape[0] - 1, j + subcube.shape[1] - 1, k + subcube.shape[2] - 1) # 获取小立方体的右上角坐标
ax.bar3d(left_coords[0], left_coords[1], left_coords[2], cut_shape[0], cut_shape[1], cut_shape[2]) # 绘制小立方体
print("切割后的小立方体坐标范围:", left_coords, "-", right_coords)
print("切割后的小立方体:\n", subcube)
ax.set_xlabel('X') # 设置x坐标轴标签
ax.set_ylabel('Y') # 设置y坐标轴标签
ax.set_zlabel('Z') # 设置z坐标轴标签
plt.show()
"""
函数说明:ax.bar3d(x, y, z, dx, dy, dz, shade=True)
输入参数:
x, y, z: 柱体的中心坐标,分别对应于 x、y、z 轴的位置。
dx, dy, dz: 柱体的宽度、深度和高度。分别对应于 x、y、z 轴的尺寸。
shade(可选参数): 布尔值,控制是否添加光照效果,使柱体看起来更立体。
"""
参考文献
1、matplotlib官网
2、C语言中文网:matplotlib教程
3、RUNOOB.COM官网:matplotlib教程
4、matplotlib库介绍:表格汇总
5、Python–matplotlib(基本用法)
6、Python深度学习入门之plt画图工具基础使用(注释详细,超级简单)
7、python基础语法(二)——— plt的一些函数使用