L7-14 3D图形(一)
一、课堂导入
在之前的学习中我们学习了制作二维的平面图形,除了二维图形外还可制作3D立体图展示信息。
二、3D图形
1.概念
3D图形在数据分析、数据建模、图形和图像处理等领域中 都有着广泛的应用,
包括3D散点图、3D表面图、3D柱状图、 3D网状图、3D曲线图等。
2.绘图库-Matplotlib
Matplotlib 是 Python 的 2D绘图库,就像Pyecharts一样,可绘制 折线图、条形图、饼图、散点图等。
matplotlab.pyplot是用来绘图的子库,一般matplotlib.pyplot 设置为plt,调用更加方便。
案例1:
import matplotlib.pyplot as plt #导入数据 plt.plot([1,2,3,4]) #显示模块中的所有绘图对象 plt.show()
结果:是一条递增的直线,为什么呢?
如果只传入一个list给plot(),它会认为这是y的值, 并自动生成x的值,又由于python计数以0开始,x 的长度与y一致,所以x的值为[0,1,2,3]。
案例2:
import matplotlib.pyplot as plt plt.plot([1,2,3],[5,7,4]) plt.show()
说明:plot
需要许多参数,但前两个是'x'
和'y'
坐标,我们放入列表。 这意味着,根据这些列表我们拥有 3 个坐标:1,5
2,7
和3,4
。
此时我们会发现我们需要大量数据,但是在列表中逐个输入参数效率太低,这时我们用numpy生成数组, 生成大批量的数据,快速满足需求。
3.Numpy
3.1 什么是数组
数组是在程序设计中,为了处理方便, 把具有相同类型的元素存储起来的集合。
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。
3.2 Numpy使用
import numpy as np # 1.array()函数创建数组 n = np.array([1, 2, 3, 4]) # 2.zeros():创建全为0的数组,数组元素默认值是0. n1 = np.zeros(10) # 使用zeros函数创建一个全为0的10行10列数组。 n2 = np.zeros((10, 10)) # 按照n2创建一个数组 n3= np.zeros_like(n2) # 3.ones():创建全为1的数组,所有元素都为1的数组 n4 = np.ones(10) # 使用ones函数创建一个全是1的形状为(3, 3)的2维数组 n5 = np.ones((3, 3)) # 按照n5创建一个数组 n6 = np.ones_like(n5) # 4.arange()创建的NumPy数组,使用Numpy中类似于range的函数arange # 产生0-9共10个元素的数组 n7 = np.arange(10) #产生从10-19共10个元素的数组 n8 = np.arange(10, 20) #产生10 12 14 16 18, 2为step间隔为2的数组 n9 = np.arange(10, 20, 2) # 5.empty() 创建空数组,填入任意值作为初始值 n10 = np.empty(5) n10.fill(6.1) # 6.random模块创建随机数组 n11 = np.random.randint(5) # random.randint():用于创建随机整数数组。 # 使用random.randint函数创建一个取值由0到10之间的5个整数组成的一维数组。 n12 = np.random.randint(0,10,5)
三、制作3D坐标轴图形
制作3D 图形时,我们需要使用matplotlib中的一个工具包(toolkits),mpl_toolkits.mplot3d是 可绘制三维图形的工具包,提供了基本的3D绘图功能,
支持的图表类型包括散点图、曲面图、网格图等,如果要为图表指定3D视图,要用Axes3D设置坐标轴。
1.3D坐标轴
通过我们的简单介绍,接下来我们将开始完成本节课3D图形的基本工作。
# 导入绘图用的模块 import matplotlib.pyplot as plt # 画三维图的工具包mpl_toolkits.mplot3d # Axes3D是mpl_toolkits.mplot3d中的一个绘图函数 from mpl_toolkits.mplot3d import Axes3D # 建立画布,生成数据 fig=plt.figure() #创建一个Axes对象,将二维转换为三维(有3D坐标) ax=Axes3D(fig) #显示图形 plt.show()
2. 3D散点图
2.1 简单散点图
# 1.简单三维散点图 # 导入numpy 库 import numpy as np # 导入matplotlib库 import matplotlib.pyplot as plt # # 画三维图的工具包mpl_toolkits.mplot3d # # Axes3D是mpl_toolkits.mplot3d中的一个绘图函数 from mpl_toolkits.mplot3d import Axes3D # 使用random.randint函数创建一个取值由0到24之间的20个整数组成的一维数组。 x = np.random.randint(0,24,20) y = np.random.randint(0,24,20) z = np.random.randint(0,24,20) # 创建一个绘图对象 fig = plt.figure() #二维转换为三维 ax = Axes3D(fig) #设置标题 ax.set_title('Scatter Plot') #修改颜色c及marker标记号".",",","o","v","^","<","1","8","p" # c:色彩(b-blue,c-cyan,g-green,k-black,m-magenta,r-red,w-white,y-yellow) # marker:方位形状 # 点,像素,圆形,倒三角,正三角,左三角,tri_down,八角形,五星 ax.scatter(x, y, z,c = "r", marker=("2")) # 添加坐标轴(顺序是Z, Y, X)或不添加 ax.set_zlabel('Z') ax.set_ylabel('Y') ax.set_xlabel('X') plt.show()
2.2 复杂的散点图
# 导入需要的库 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 绘制3维的散点图 # # 使用random.randint函数创建一个取值由-到-之间的20个整数组成的一维数组。 x = np.random.randint(0,10,20) y = np.random.randint(-20,20,20) z = np.random.randint(0,30,20) x1= np.random.randint(5,15,20) y1= np.random.randint(0,20,20) z1= np.random.randint(10,30,20) # 创建一个绘图对象 fig = plt.figure() #二维转换为三维 axes3d = Axes3D(fig) axes3d.scatter(x, y, z,c = "r" ,marker=("*")) axes3d.scatter(x1, y1, z1,c = "r" ,marker=("*")) plt.show()
四、总结
# 1. matplotlab.pyplot是用用来绘图的子库,一般matplotlib.pyplot 设置为plt # 2.在绘图时,往往需要大批量的数据,在列表中逐个输入参数效率太低, 这时我们用numpy生成数组,生成大批量的数据,快速满足需求。 # 3.数组是在程序设计中,为了处理方便, 把具有相同类型的元素 存储起来的集合。