3D 图绘制|学习笔记

简介: 快速学习3D 图绘制

开发者学堂课程【Python 常用数据科学库:3D 图绘制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/546/detail/7507


3D 图绘制

在之前研究的都是如何去画二维的图像,在二维图像中加以为就是 3D 图像。如何绘制 3D 图像,首先先把工具导入,需要注意的是在此处需要多导入一个画 3D 图的工具。方法如下:

首先构造一个二维图的表达,在进行改变。把二维的东西进行改变就要用导进来的工具,将其进行改变,将二维转化为三维。首先构造 X 和 Y:

x = np. arange (-4,4,0. 25)

y = np.arange(-4,4,0.25)

X.Y = np.meshgrid(x,y)

2维只需要覆盖点,3维就需要覆盖到2维当中的每一个点,也就是需要一个网格才能更方便地画3D图像:

Z = np.sin(np.sqrt(x**2+y**2))

接下来可以绘制3D 平面,面里需要 XYZ 3个空间,还需要花步长,也就是密度,把图画得更好看,就可以再指定一个 C map。

import matplotlib.pyplot as pltimport nunpy as npfrom mpl_toolkits.mplot3d import Axes30

fig =plt.figure()

ax = Axes3D(fig)

x = np. arange (-4,4,0. 25)

y = np.arange(-4,4,0.25)

X.Y = np.meshgrid(x,y)

Z = np.sin(np.sqrt(x**2+y**2))

ax. plot_surface(X.y,Z,rstride = 1,cstride = 1,cmap='rainbox')plt.show

输入以上代码之后,系统提示 Z 没有被定义,更改 Z 的大小写之后出现如下图像:

image.png

该图像也就是把2维图做了一个转化,转化到了3维中。要画3维的图像,就需要如下步骤:

首先,把工具导入:

Import matplotlib.pyplot as plt

fron mpl_toolkits.mplot3d import Axes3D

然后画出3维图像的面:

fig=plt.figure()

ax = fig.add_subplot(111,projectfon ='3d')

plt. show

接下来再画3维图像,将 figure 进行导入,指定一个 projection ,之后传入数据:

fig =plt.figure()

ax = fig gca(projection='3d')

theta = np. linspace (-4*np.pi. np.pi, 4,100)

z = np.linspace(-2. 2. 100)

r=Z**2

x=r*np.sin(theta)

y=r*np.cos(theta)

ax.plot(x,y,z)

plt.show()

图像image.png如下:

基本步骤就是指定对象是3D 格式,在对象当中传入3维,就可以了。在3维当中也可以画散点图画法和2维相同,只是原来画两个轴线,现在画三个轴。首先将工具导入, Define 一个函数,这个函数就会返回一个随机值,传入最小值最大值和随机值。最后返回,代码如下:

np.randon.seed(1)

def randrange(n,vnin,vnax):

return (vmax vnin)*np.randon rand(n)+vmin

指定画的点数,并且指定画几种不同颜色的值,分别指定他的位置取值范围,把 X 的值和 Y 的值还有 Z 的值分别拿出来。刚才写的函数就会产生随机的数。有最大值和最小值,可以自己指定,最后把图画出来。传入 XYZ。指定 Color 和 marker,

运行代码之后发现错误,修改代码类型之后,总代码如下:

np.randon.seed(1)

def randrange(n,vnin,vnax):

return (vmax vnin)*np.randon rand(n)+vmin

fig =plt.firure()

ax =fig_add_subplot (111,projection * '3d')

n·=100

for c,mzlox,zhigh in [('r','o',50,-25), ('b','x','-30','-5')]:

xs * randrange (n, 23, 32)

ys * randrange (n,0, 100)

zs * randrange(n,int (zlox),Int (zhigh))

ax. scatter(xs, ys,z5, c*c,marker*n)

plt.show()

以上方法就是在三维图中将散点图画出来。

3维的东西总是立体的,立体的东西就可以。全转,所以可以加入代码:ax.view_init(20,0)

输入代码之后就可以,随时改变角度,只需要改变2个值,对着用户的位置就不断发生变化。如果需要画一个三维条形图,方法也相似:

插入一个 for 循环,Z 是指标,C 是颜色:

fig =plt.figure()

ax = fig.add_subplot(111, projection='3d')

for c, z in zip(['r','g','b','y'],[30. 20. 10. 0]):

指定 X 数据和 Y 数据:

xs = np.arange (20)

ys = np. randon. rand(20)

开始画图, 传入XYZ的数据:

ax.bar(xs,ys,zs = z)

plt.show()

进行绘画之后,发现图表较为奇怪,所以对以上代码进行更改,总代码如下:

fig =plt.figure()

ax = fig.add_subplot(111, projection='3d')

for c, z in zip(['r','g','b','y'],[30. 20. 10. 0]):

xs = np.arange (20)

ys = np. randon. rand(20)

ax.bar(xs,ys,zs = z,zdir=’y’)

plt.show()

指定 ZDIR。不同的指定,图像就不同,继续为图像加上颜色。代码如下:

fig =plt.figure()

ax = fig.add_subplot(111, projection='3d')

for c, z in zip(['r','g','b','y'],[30. 20. 10. 0]):

xs = np.arange (20)

ys = np. randon. rand(20)

cs=[c]*len(xs)

ax.bar(xs,ys,zs = z,zdir=’y’,color=cs.alpha=0.5)

plt.show()

以上代码就是基本条形图的画法。

在之前一个单元格就是1*1的,如果指定 rstride 为2,单元格位置就发生变化,将他指定的数值变大一点就可以明显看出差别。原来是11的,在原来面上有很多东西,将其数值变大之后,面上就空旷了,所以其类似于每一个格的密度。代码中将图像的投影画出,只需要加入代码:ax.countour(X,Y,Z,zdim=’z’,offset=-2,cmap=’rainbow’),此时需要注意大小写,生成如下:

image.png

对范围进行限制为负2到2,只需要加入代码:ax.set_zlim(-2,2),以上就是画3维图的方法。

相关文章
|
6月前
|
存储
QT图形视图框架绘制曲线图和Smith图
QT图形视图框架绘制曲线图和Smith图
117 0
|
6月前
如何绘制PAD图和N-S图(详细步骤)
如何绘制PAD图和N-S图(详细步骤)
465 0
|
6月前
|
Python
matplotlib绘制动态瀑布图
matplotlib绘制动态瀑布图
|
数据可视化
R绘图 | 云雨图+双向条形图
R绘图 | 云雨图+双向条形图
150 0
如何用ggplot2绘制基因功能富集气泡图?
如何用ggplot2绘制基因功能富集气泡图?
|
XML 数据可视化 Android开发
流程图绘制
经典工具:Flowable Eclipse Designer
217 0
|
数据可视化 数据挖掘
绘图系列|R-corrplot相关图
绘图系列|R-corrplot相关图
137 0
|
机器学习/深度学习 算法 数据可视化
R绘图案例|基于分面的面积图绘制
R绘图案例|基于分面的面积图绘制
10868 0
|
人工智能 数据可视化
如何一步步提高图形 B 格?以 ggplot 绘图为例
如何一步步提高图形 B 格?以 ggplot 绘图为例
135 0
|
图形学
Unity利用正态分布绘制噪点图
Unity利用正态分布绘制噪点图
272 0
Unity利用正态分布绘制噪点图