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维图的方法。

相关文章
|
安全 Java 应用服务中间件
Nacos报错问题之鲲鹏上启动报错如何解决
Nacos是一个开源的、易于部署的动态服务发现、配置管理和服务管理平台,旨在帮助微服务架构下的应用进行快速配置更新和服务治理;在实际运用中,用户可能会遇到各种报错,本合集将常见的Nacos报错问题进行归纳和解答,以便使用者能够快速定位和解决这些问题。
|
负载均衡 安全 Java
深入了解Spring Cloud Gateway:构建高效微服务网关
Spring Cloud Gateway是一个强大的微服务网关,它在现代分布式架构中扮演着至关重要的角色。本文将深入介绍Spring Cloud Gateway的核心概念、功能和用途,以帮助您更好地理解和利用这一工具来构建高效的微服务应用。
|
2月前
|
SQL Java 关系型数据库
mybatis批量插入对比
本文介绍了几种在 Spring Boot 项目中使用 MyBatis-Plus 进行批量插入操作的性能对比方法,包括手写循环插入、MyBatis-Plus 的 `saveBatch` 方法、自定义批量插入 SQL 以及开启 MySQL 的 `rewriteBatchedStatements=true` 参数的方式进行saveBatch对比。
277 1
mybatis批量插入对比
|
2月前
|
负载均衡 Java Nacos
微服务架构中的服务注册与发现流程
本内容介绍了微服务架构中的服务注册与发现流程,包括服务注册中心(如Nacos)、服务提供者和调用者的角色分工。服务启动时自动注册信息至注册中心,调用者通过客户端负载均衡(如Spring Cloud Loadbalancer)选取服务实例进行远程调用。同时,内容还讲解了OpenFeign的工作原理,其作为HTTP客户端集成负载均衡,通过接口定义、代理生成、请求发送与结果解析,实现服务间的高效通信。
|
7月前
|
人工智能 自然语言处理 搜索推荐
马斯克AI Grok 3 国内如何使用?请收下这篇新手指南!
Grok AI,由埃隆·马斯克(Elon Musk)旗下的人工智能初创公司 xAI 于 2023 年 11 月推出,迅速成为 AI 领域的一颗耀眼新星
2746 80
|
4月前
|
存储 安全 Java
2025 年最新 40 个 Java 基础核心知识点全面梳理一文掌握 Java 基础关键概念
本文系统梳理了Java编程的40个核心知识点,涵盖基础语法、面向对象、集合框架、异常处理、多线程、IO流、反射机制等关键领域。重点包括:JVM运行原理、基本数据类型、封装/继承/多态三大特性、集合类对比(ArrayList vs LinkedList、HashMap vs TreeMap)、异常分类及处理方式、线程创建与同步机制、IO流体系结构以及反射的应用场景。这些基础知识是Java开发的根基,掌握后能为后续框架学习和项目开发奠定坚实基础。文中还提供了代码资源获取方式,方便读者进一步实践学习。
1181 2
|
9月前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
846 4
|
大数据 数据处理 计算机视觉
使用LabVIEW进行大数据数组操作的优化方法
使用LabVIEW进行大数据数组操作的优化方法
372 3
|
11月前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
726 5
|
消息中间件 缓存 人工智能
RocketMQ 在业务消息场景的优势详解
RocketMQ 在业务消息场景的优势详解
22042 101