Python绘制3D曲面图

👽发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。

探索Python中绘制3D曲面图的艺术

在数据可视化的世界中,3D曲面图是一种强大的工具,能够将复杂的数据模式以清晰直观的方式展现出来。Python提供了多种库和工具,使得创建和定制3D曲面图变得简单而令人兴奋。本文将介绍如何使用Python中的Matplotlib和mpl_toolkits.mplot3d库绘制令人印象深刻的3D曲面图。

准备工作

首先,确保你的Python环境中安装了Matplotlib库。如果还没有安装,可以使用pip进行安装:

pip install matplotlib

导入必要的库

在开始之前,让我们先导入必要的库:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

创建数据

在我们绘制3D曲面图之前,我们需要创建一些数据。我们可以使用NumPy库来生成一些数据集。这里我们以一个简单的函数为例:

def f(x, y):return np.sin(np.sqrt(x**2 + y**2))

创建网格点

接下来,我们需要定义我们要在曲面上显示的坐标点。我们可以使用numpy.meshgrid函数来生成这些点:

x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = f(x, y)

绘制3D曲面图

现在,我们已经准备好绘制我们的3D曲面图了。我们可以使用Matplotlib的plot_surface函数来实现:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis')
plt.show()

定制曲面图

我们可以通过一些可选参数来定制我们的曲面图,以使其更具吸引力。例如,我们可以添加轮廓线、更改颜色映射、更改视角等:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis', edgecolor='none')  # 添加轮廓线
ax.view_init(45, 60)  # 更改视角
plt.show()

添加标签和标题

在创建3D曲面图时,添加标签和标题是非常重要的,这样可以使图形更具可读性和易理解性。我们可以通过调用set_xlabelset_ylabelset_zlabel方法来添加坐标轴标签,以及使用set_title方法添加标题:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis', edgecolor='none')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_title('3D Surface Plot')
plt.show()

添加色标

为了更清楚地理解曲面图中数值的含义,我们可以添加一个色标。色标可以显示颜色与数值之间的对应关系。我们可以使用colorbar方法添加色标:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, cmap='viridis', edgecolor='none')
fig.colorbar(surf, shrink=0.5, aspect=5)  # 添加色标
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_title('3D Surface Plot with Colorbar')
plt.show()

完整示例代码

下面是一个完整的示例代码,包括了所有的定制选项:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Ddef f(x, y):return np.sin(np.sqrt(x**2 + y**2))x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = f(x, y)fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, cmap='viridis', edgecolor='none')
fig.colorbar(surf, shrink=0.5, aspect=5)  # 添加色标
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_title('3D Surface Plot with Colorbar')
plt.show()

通过这些定制选项,我们可以创建出更具信息量和美观度的3D曲面图。掌握这些技巧后,你将能够根据自己的需求创建出各种各样的3D可视化效果。

添加透明度和阴影

除了标签、标题和色标之外,我们还可以通过调整透明度和阴影效果来增强3D曲面图的视觉效果。透明度可以使得曲面图中的数据分布更加清晰,而阴影则可以增加立体感。

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, cmap='viridis', edgecolor='none', alpha=0.7)  # 调整透明度
fig.colorbar(surf, shrink=0.5, aspect=5)  
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_title('3D Surface Plot with Colorbar and Transparency')
plt.show()

此外,我们还可以通过设置shade参数为True来添加阴影效果:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, cmap='viridis', edgecolor='none', shade=True)  # 添加阴影
fig.colorbar(surf, shrink=0.5, aspect=5)  
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_title('3D Surface Plot with Colorbar and Shadow')
plt.show()

其他定制选项

除了上述提到的定制选项外,Matplotlib还提供了许多其他参数和方法,用于进一步定制3D曲面图,如修改坐标轴范围、设置视角、更改颜色映射等。你可以根据具体的需求来选择合适的选项进行定制。

进一步定制颜色映射

在3D曲面图中,颜色映射是一种重要的视觉工具,它能够帮助我们更直观地理解数据的分布和变化。除了使用内置的颜色映射外,我们还可以自定义颜色映射以满足特定需求。

from matplotlib.colors import Normalizefig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 自定义颜色映射
norm = Normalize(vmin=np.min(z), vmax=np.max(z))
colors = plt.cm.cool(norm(z))surf = ax.plot_surface(x, y, z, facecolors=colors, shade=False)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_title('Customized 3D Surface Plot with Color Mapping')
plt.show()

添加网格线

有时候,我们希望在3D曲面图中添加网格线以帮助更好地理解数据的分布和形状。我们可以通过设置grid参数为True来添加网格线:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, cmap='viridis', edgecolor='none')
fig.colorbar(surf, shrink=0.5, aspect=5)  
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_title('3D Surface Plot with Colorbar and Grid')
ax.grid(True)  # 添加网格线
plt.show()

总结

本文介绍了如何使用Python中的Matplotlib库创建令人印象深刻的3D曲面图,并展示了一系列定制选项,包括标签、标题、色标、透明度、阴影、颜色映射和网格线等。通过学习这些技巧,我们能够更好地展示和理解数据,从而为数据可视化工作提供了丰富的可能性。

通过创建3D曲面图,我们可以将复杂的数据模式以直观、清晰的方式呈现出来,帮助我们发现数据中的规律和趋势。定制选项使我们能够根据特定需求调整图形的外观和表现形式,从而更好地满足我们的分析和展示需求。

总而言之,掌握如何创建和定制3D曲面图是数据科学和数据可视化领域中的重要技能之一。希望本文能够为你提供一些启发和帮助,激发你对数据可视化的兴趣,并在实践中不断探索和创新。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/828259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据链路层(计算机网络,待完善)

0、前言 本文大多数图片都来自于 B站UP主:湖科大教书匠 的教学视频,对高军老师及其团队制作出这么优质的课程表示感谢。文章增加了部分个人理解,内容并不是对视频的静态化翻译。 1、概述 1.1、数据链路层在计算机网络体系中的位置 1.2、对…

动手模拟 java Flux

MyFluxTest.java&#xff1a; import java.util.ArrayList; import java.util.List;public class MyFluxTest {public static void main(String[] args) {List<String> names new ArrayList<>();names.add( "张三" );names.add( "李四" );nam…

Jenkins集成Terraform实现阿里云CDN自动刷新

在互联网业务中&#xff0c;CDN的应用已经成了普遍&#xff0c;SRE的日常需求中&#xff0c;CDN的刷新在前端需求逐渐中占了很大比例&#xff0c;并且比较琐碎。做为合格的SRE&#xff0c;把一切自动化是终极使命&#xff0c;而今天就分享通过JenkinsTerraform实现阿里云的CDN自…

CISSP通关学习笔记:共计 9 个章节(已完结)

1. 笔记说明 第 0 章节为开篇介绍&#xff0c;不包括知识点。第 1 - 8 章节为知识点梳理汇总&#xff0c;8 个章节的知识框架关系如下图所示&#xff1a; 2. 笔记目录 「 CISSP学习笔记 」0.开篇「 CISSP学习笔记 」1.安全与风险管理「 CISSP学习笔记 」2.资产安全「 CISSP…

机器学习/算法工程师面试题目与答案-深度学习部分1

机器学习/算法工程师面试题目与答案-深度学习部分 BatchNormalization的作用梯度消失循环神经网络&#xff0c;为什么好?什么是GroupConvolution什么是RNN神经网络中权重共享的是&#xff1f;神经网络激活函数&#xff1f;为什么在深度学习中常进行finetuning画GRU结构图什么是…

自己在hadoop中会输错的命令

&#xff08;01&#xff09; hdfs dfsadmin -report -live 仅查看集群在线节点的基本信息可以使用&#xff1a; &#xff08;02&#xff09; hdfs dfs mkdir -C /Tipdm/Hadoop 使用这个命令可以在hdfs上面创建一个 /Tipdm/Hadoop&#xff0c;自己错误的点就是&#xff1a;-C&…

Flink CDC详解

文章目录 Flink CDC一 CDC简介1.1 CDC定义1.2 CDC应用场景1.3 CDC实现机制1.4 开源CDC工具对比 二 Flink CDC简介2.1 Flink CDC介绍2.2 Flink CDC Connector(连接器)2.3 Flink CDC && Flink版本2.4 Flink CDC特点 三 Flink CDC发展3.1 发展历程3.2 背景Dynamic Table &…

51单片机入门_江协科技_35~36_OB记录的自学笔记_AD与DA转换(XPT2046)

35. AD_DA 35.1. AD/DA介绍 •AD&#xff08;Analog to Digital&#xff09;&#xff1a;模拟-数字转换&#xff0c;将模拟信号转换为计算机可操作的数字信号 •DA&#xff08;Digital to Analog&#xff09;&#xff1a;数字-模拟转换&#xff0c;将计算机输出的数字信号转换…

系统设计 --- E2E Test System

系统设计 --- E2E Test System 什么是E2EE2E Architecture Example 什么是E2E E2E&#xff08;端到端&#xff09;测试是一种软件测试方法&#xff0c;旨在模拟真实的用户场景&#xff0c;测试整个应用程序或系统的端到端功能和交互流程。E2E 测试涵盖了从用户界面到后端系统的…

已解决java.util.concurrent.CancellationException: 取消异常的正确解决方法,亲测有效!!!

已解决java.util.concurrent.CancellationException: 取消异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 检查任务状态 使用适当的异常处理 提供取消的反馈 管理并发任务的生命周期 总结 博…

【Flutter 面试题】 为什么Flutter中的Widget使用const注解?

【Flutter 面试题】 为什么Flutter中的Widget使用const注解? 文章目录 写在前面口述回答补充说明示例代码说明写在前面 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023博客之星TOP153。 👏🏻 正在学 Flutter 的同…

智能合约语言(eDSL)—— 测试

1、准备合约 如何写合约&#xff0c;与编译之前的文章已经写过了&#xff0c;准备好.wasm文件。 2、测试程序 xwasm/wasm/tests at main XuHugo/xwasm GitHub 2.1 读取合约 let modules fs::read("./tests/wasmfile/contract.wasm").unwrap(); 2.2预编译合约…

Java23种设计模式-结构型模式之外观模式

外观模式&#xff08;Facade Pattern&#xff09;&#xff1a;为复杂的系统提供了一个简单的统一接口&#xff0c;使得系统更易于使用和理解&#xff08;对外提供一个统一的方法&#xff0c;来访问子系统中的一群接口&#xff09; 外观模式三个核心角色&#xff1a; 角色1.外观…

信息系统项目管理师论文考察范围预测

在2023年下半年实施机考之前&#xff0c;论文的范围还是比较好预测的&#xff0c;因为从历年考题来看&#xff0c;可以说十大管理领域考察的概率接近100%&#xff0c;而且有一定规律&#xff0c;比如说某个管理领域很久没考了&#xff0c;那么考察的概率就相对大一点&#xff0…

力扣爆刷第126天之动态规划五连刷(斐波那契、爬楼梯、不同路径)

力扣爆刷第126天之动态规划五连刷&#xff08;斐波那契、爬楼梯、不同路径&#xff09; 文章目录 力扣爆刷第126天之动态规划五连刷&#xff08;斐波那契、爬楼梯、不同路径&#xff09;一、509. 斐波那契数二、70. 爬楼梯三、746. 使用最小花费爬楼梯四、62. 不同路径五、63. …

前端算法

4大算法&#xff1a; 贪心算法&#xff1a;局部最优解分治算法&#xff1a;将一个问题分成多个小模块动态规划&#xff1a;每一个状态都是过去历史的总结回溯算法&#xff1a;不是最优选择的时候退回重新选 一、排序算法 1. 冒泡排序&#xff1a;数字越大越往上 第一次循环 比…

Docker创建enrollment token错误异常

问题 部署完kibana&#xff0c;需要通过enrollment token方式来连接elasticsearch&#xff0c;此时需要在elasticsearch中创建enrollment token。 执行创建命令时&#xff0c;报如下错误&#xff1a; elasticsearch-create-enrollment-token --scope kibanaERROR: [xpack.se…

IDEA 全局查找 ctrl + shift + F 快捷键失效

全局查找&#xff1a;ctrl shift F 需要关闭微软输入法简体/繁体切换&#xff0c;不然被占用了无效 (装了搜狗输入法的同理,找一下是不是这个快捷键冲突了 ) 另外还有 IDEA 中 重构变量名 &#xff1a;shift F6 需要关闭微软输入法最新版本 ( 使用以前版本的微软输入法就没…

CSS渐变色理论与分类、文字渐变色方案、炸裂渐变色方案以及主流专业渐变色工具网站推荐

渐变色彩可以增加视觉层次感和动态效果&#xff0c;使网页界面更加生动有趣&#xff0c;吸引用户注意力。另外&#xff0c;相较于静态背景图片&#xff0c;CSS渐变无需额外的HTTP请求&#xff0c;减轻服务器负载&#xff0c;加快页面加载速度&#xff1b;同时CSS渐变能够根据容…

Qt——QGridLayout

1. 设置单元格比例 在Qt中&#xff0c;如果你想设置网格布局&#xff08;QGridLayout&#xff09;中单元格的比例&#xff0c;你需要使用QGridLayout的拉伸系数&#xff08;stretch factors&#xff09;来控制行和列的相对大小。你可以通过调用setRowStretch和setColumnStretch…