L7-14 3D图形

Posted xiaoxiao-ya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,73,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.数组是在程序设计中,为了处理方便, 把具有相同类型的元素 存储起来的集合。

 

以上是关于L7-14 3D图形的主要内容,如果未能解决你的问题,请参考以下文章

如何系统掌握游戏编程中3D图形学相关的基础

Android片段布局完成膨胀

Python中的图形绘制——3D绘图

使用matplotlib绘制3d图形

12mmaction2 行为识别商用级别X3D复现 demo实现 检测自己的视频 Expanding Architecturesfor Efficient Video Recognition(代码片段

opengl中3d空间平面上的程序网格