matplotlib绘图(2D + 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:绘图标记

序号123456789101112131415161718192021222324
标记符'.'',''o''*''v''^''<''>''1''2''3''4''s''p''h''H''+''P''x''X''D''d''_'I
说明PointPixelCirclestartriangle_downtriangle_uptriangle_lefttriangle_righttri_downtri_uptri_lefttri_rightSquarePentagonhexagon1hexagon2PlusPlus (filled)xX (filled)DiamondDiamond (thin)HlineVline

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 来设置线类型。

序号1234
标记符'-''--''-.'':'
说明实线破折线点划线虚线

3.2.2、线条的宽度(linewidth=‘20.5’)

使用关键字参数 linewidth 或 lw 来设置线宽。(字符串格式)可以输入浮点数。

3.2.3、线条的颜色(color=‘r’)

使用关键字参数 color 或 c 来设置颜色。

序号12345678
标记符'b''g''r''c''m''y''k''w'
说明蓝色Blue绿色Green红色Red青色Cyan品红Magenta黄色Yellow黑色Black白色White

四、2D图形化显示

4.1、参数详解

序号函数说明
1plt.title()添加标题
2plt.xlabel()添加x轴标签
3plt.ylabel()添加y轴标签
4plt.xlim()设置x轴刻度的范围
5plt.ylim()设置y轴刻度的范围
6plt.xticks()设置x轴刻度的位置和标签
7plt.yticks()设置y轴刻度的位置和标签
8plt.legend()添加图例
9plt.grid()添加网格
10plt.imshow()显示网格
11plt.grid()添加网格
12plt.colorbar()添加颜色条
13plt.savafig()保存图像
14plt.pause()延迟一段时间后关闭图窗
15plt.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():添加图例

matplotlib.pyplot.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():添加网格

matplotlib.pyplot.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种)

序号函数说明函数说明
2plt.plot()绘制点和线plt.scatter()绘制散点图
4plt.bar()绘制条形图plt.barh()绘制横向条形图
6plt.hist()绘制直方图plt.pie()绘制饼图
8plt.psd()绘制功率谱密度图plt.specgram()绘制谱图
10plt.cohere()绘制相关性函数plt.boxplot()绘制箱形图
12plt.step()绘制步阶图plt.polar()绘制极坐标图
14plt.contour()绘制等值图plt.vlines()绘制垂直图
16plt.stem()绘制柴火图plt.plot_date()绘制数据日期
18plt.clabel()绘制轮廓图plt.hist2d()绘制2D直方图
20plt.quiverkey()绘制颤动图plt.stackplot()绘制堆积面积图
22plt.Violinplot()绘制小提琴图

4.3、项目实战

4.1.1、plt.plot():绘制2D点和线

plt.plot() 函数详解

在这里插入图片描述

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散点图

plt.scatter()函数详解

在这里插入图片描述

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、参数详解

序号函数说明举例
1ax.set_xlabel()设置x坐标轴的标签ax.set_xlabel('X Label')
2ax.set_ylabel()设置y坐标轴的标签ax.set_ylabel('Y Label')
3ax.set_zlabel()设置z坐标轴的标签ax.set_xlabel('Z Label')
4set_xlim()设置 x 轴范围ax.set_xlim(-10, 10)
5set_ylim()设置 y 轴范围ax.set_ylim(-10, 10)
6set_zlim()设置 z 轴范围ax.set_zlim(-10, 10)
7ax.set_title()添加标题ax.set_title('3D Plot')
8ax.legend()添加图例ax.legend(['Line 1', 'Line 2'])
9ax.view_init()设置三维图的视角,包括视点和仰角。ax.view_init(elev=30, azim=45)
10ax.grid()在子图中添加网格。ax.grid(True)
11ax.xaxis.grid()在子图中添加x轴网格。ax.xaxis.grid(True)
12ax.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的一些函数使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖墩会武术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值