matplotlib绘图(2D and 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 的第三方绘图库,故需要安装后使用。本节以 Windows10 系统为例,介绍 Matplotlib 的几种安装方式。

  • (1)使用 pip 安装
    打开 CMD 命令提示符窗口,并输入以下命令:pip install matplotlib
  • (2)使用 Anaconda 安装
    安装 matplotlib 的最好方法是下载 Python 的 Anaconda 发行版,因为 matplotlib 被预先安装在 Anaconda 中。
  • (3)使用 conda 安装
    打开 CMD 命令提示符窗口,并输入以下命令:conda install -c conda-forge matplotlib

在绘图之前,需要先导入pyplot库:import matplotlib.pyplot as plt

  • pyplot 是 matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。
  • plt 是通过as设置的(常用)别名。

三、绘图参数设置

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 的用法【最全详解】

  • 位置参数(arguments,args)* args 表示将不定数量的参数传递给一个函数, 本质上是一个元祖tuple
  • 关键字参数(keyword arguments,kwargs)** kwargs 表示将不定长度的 键值对(key-value)作为参数传递给一个函数, 本质上是一个字典dict

4.1.2、plt.title():添加标题

matplotlib.pyplot.title() 参数详解

"""
函数说明:plt.title(*args, **kwargs)
关键字参数:
		(0)label					标签文本
		(1)fontsize				字体大小(默认12)	可选参数:[xx-small, x-small, small, medium, large, x-large, xx-large]
		(2)fontweight				字体粗细				可选参数:[light, normal, medium, semibold, bold, heavy, black]
		(3)fontstyle				字体类型				可选参数:[normal正常, italic斜体, oblique倾斜]
		(4)verticalalignment		水平对齐方式			可选参数:[center, top, bottom, baseline]
		(5)horizontalalignment	垂直对齐方式			可选参数:[left, right, center]
		(6)rotation				旋转角度				可选参数:[vertical, horizontal, 数字]
		(7)alpha					透明度				参数值范围:[0, 1]
		(8)backgroundcolor		标题背景颜色
		(9)bbox					给标题增加外框 		常用参数如下:[boxstyle方框外形, facecolor(简写fc)背景颜色, edgecolor(简写ec)边框线条颜色, edgewidth边框线条大小]
"""

4.1.3、plt.xlabel():添加x轴标签

matplotlib.pyplot.xlabel 参数详解

"""
函数说明:plt.xlabel(*args, **kwargs)
关键字参数:
			xlabel/ylabel			标签文本
			fontsize				字体大小。[数字, 'small', 'large', 'medium']
			verticalalignment		上下平移。['top', 'bottom', 'center', 'baseline']
			horizontalalignment		左右平移。['center', 'right', 'left']
			rotation				旋转角度。['vertical', 'horizontal']
			
默认:plt.xlabel(fontsize='large', verticalalignment='top', horizontalalignment='center', rotation='horizontal')
默认:plt.ylabel(fontsize='large', verticalalignment='bottom', horizontalalignment='center', rotation='vertical')
"""

4.1.4、plt.xlim():设置x轴刻度的范围

matplotlib.pyplot.xlim() 参数详解

"""
函数说明:plt.xlim(*args, **kwargs)
关键字参数:
			left			设置刻度的最小值
			right			设置刻度的最大值

函数说明:plt.ylim(*args, **kwargs)
关键字参数:
			bottom			设置刻度的最小值
			top				设置刻度的最大值
"""

4.1.5、plt.xticks():设置x轴刻度的位置和标签

matplotlib.pyplot.xticks() 参数详解

"""
函数说明:plt.xticks(ticks=None, labels=None, **kwargs)
关键字参数:
			ticks			刻度位置(列表格式)。若传入空列表,即不显示x轴。
			labels			刻度位置对应的标签文本(列表格式)。当ticks参数有输入值,该参数才能传入参数
			**kwargs		用来控制标签文本的展示格式。例如:标签的字体大小、字体样式、旋转角度(默认逆时针旋转)等
"""

4.1.6、plt.legend():添加图例

matplotlib.pyplot.legend() 参数详解

"""
函数说明:plt.legend(*args, **kwargs)
关键字参数:
		loc				设置图例位置(int数字、string单词均可以控制)	
							0:'best'			1:'upper right'		2:'upper left'		3:'lower left'		
							4:'lower right'		5:'right'			6:'center left'		7:'center right'	
							8:'lower center'	9:'upper center'	10:'center'
		fontsize		设置字体大小[int, float, {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'}]
		frameon			是否绘制图例边框[False, True]
		edgecolor		设置图例边框颜色['blue', 'red'...]
		facecolor		设置图例背景颜色['blue', 'red'...]
		title			设置图例标题(字符串)
		
		prop			字体参数
		markerscale		图例标记与原始标记的相对大小
		markerfirst		如果为True,则图例标记位于图例标签的左侧
		numpoints		线条图图例条目创建的标记点数
		scatterpoints	散点图图例条目创建的标记点数
		scatteryoffsets	散点图图例条目创建的标记的垂直偏移量
		fancybox		控制是否应在构成图例背景的FancyBboxPatch周围启用圆边
		shadow			控制是否在图例后面画一个阴影
		framealpha		控制图例框架的 Alpha 透明度
		ncol			设置图例分为n列展示
		borderpad		图例边框的内边距
		labelspacing	图例条目之间的垂直间距
		handlelength	图例句柄的长度
		handleheight	图例句柄的高度
		handletextpad	图例句柄和文本之间的间距
		borderaxespad	轴与图例边框之间的距离
		columnspacing	列间距
		bbox_to_anchor	指定图例在轴的位置
		bbox_transform	bbox的转换
"""

4.1.7、plt.grid():添加网格

matplotlib.pyplot.grid() 参数详解

"""
函数说明:plt.grid(None, which='major', axis='both', **kwargs)
输入参数:
			None			(可选参数)是否显示网格。布尔值=[True, False],None与True等效
			which:			(可选参数)网格线。['major', 'minor', 'both']
			axis:			(可选参数)显示哪个方向的网格线。['x', 'y', 'both']
			**kwargs:		设置网格样式。[color='r', linestyle='-', linewidth=2],分别表示网格线的颜色,样式和宽度。可选。
"""

4.1.8、plt.colorbar():添加颜色条

plt.colorbar()用于在界面上显示当前的颜色条,若需要指定颜色条需要使用关键字参数 cmap
更多颜色条请看:颜色条类型
在这里插入图片描述

4.1.9、plt.savafig():保存图像

注意事项:调用plt.savafig()必须在plt.show()之前,不然保存结果为一张空白图。因为plt.show()之后会自动调用clear()清除缓存。plt.savefig() 保存空白或显示错乱

"""
函数说明:plt.savefig('test.jpg', dpi=200, bbox_inches='tight')
输入参数:
			path			保存路径
			dpi				设置图像的分辨率
			bbox_inches		设置图像与图例之间的位置,可以避免图像与图例叠加在一起。
"""

4.1.10、plt.show():显示图像

使用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.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.jpg', dpi=200, bbox_inches='tight')                 # 保存图像
plt.show()								                              # 显示图像

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的一些函数使用

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胖墩会武术

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

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

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

打赏作者

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

抵扣说明:

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

余额充值