Python绘图-14绘制3D图(上)

news2024/10/7 17:30:59

14.1绘制3D散点图

14.1.1图像呈现

14.1.2绘图代码

import numpy as np  # 导入numpy库,numpy是Python的一个强大的数值计算扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块pyplot,matplotlib是Python的一个绘图库,pyplot是其中的一个子模块,提供了MATLAB类似的绘图API。
from matplotlib import rcParams  # 从matplotlib库中导入rcParams模块,rcParams是一个字典对象,用于处理与matplotlib相关的各种配置参数。
# 定义一个字典config,其中包含字体、大小和其他相关的配置参数
config = {"font.family": 'serif', "font.size": 10.5, "mathtext.fontset": 'stix', "font.serif": ['SimSun']}
# 使用config字典中的配置参数更新rcParams,从而修改matplotlib的默认配置
rcParams.update(config)
# 修正matplotlib配置,使得在显示负号时不会出现问题
plt.rcParams['axes.unicode_minus'] = False
# 设置数据点的数量
N = 250
# 设置随机数种子,使得每次生成的随机数序列相同
np.random.seed(124)
# 生成一个包含N个随机数的数组,范围在0到1之间,然后乘以15
x = 15 * np.random.random(N)
# 生成y值,它是x的正弦值加上一个小的随机扰动
y = np.sin(x) + 0.25 * np.random.random(N)
# 生成z值,它是x的余弦值加上一个小的随机扰动
z = np.cos(x) + 0.25 * np.random.random(N)
# 创建一个新的图形窗口,并设置其大小和分辨率
plt.figure(figsize=(6, 6), dpi=110)
# 创建一个3D坐标轴的子图
ax = plt.axes(projection='3d')
# 在3D坐标轴上绘制散点图,散点的坐标为(x, y, z),颜色为红色
ax.scatter3D(x, y, z, color='r')
# 设置x轴的标签、字体大小和标签与轴之间的距离
ax.set_xlabel('x', fontsize=20, labelpad=20)
# 设置y轴的标签、字体大小和标签与轴之间的距离
ax.set_ylabel('y', fontsize=20, labelpad=20)
# 设置z轴的标签、字体大小和标签与轴之间的距离
ax.set_zlabel('z', fontsize=20, labelpad=20)

# 显示图形窗口
plt.show()

14.2设置3D散点图长宽比

14.2.1图像呈现

14.2.2绘图代码

import numpy as np  # 导入numpy库,numpy是Python中用于数值计算的一个扩展程序库,常用于处理大型多维数组和矩阵运算。  
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块pyplot,用于生成各种静态、动态、交互式的可视化图形。
from matplotlib import rcParams  # 从matplotlib库中导入rcParams,rcParams是一个字典对象,用于处理matplotlib的默认配置参数。
# 定义一个字典config,其中包含字体、大小和其他相关的配置参数
config = {
    "font.family": 'serif',  # 设置字体族为衬线字体
    "font.size": 10.5,  # 设置字体大小为10.5
    "mathtext.fontset": 'stix',  # 设置数学文本的字体集为'stix'
    "font.serif": ['SimSun']  # 设置衬线字体为'SimSun'(即宋体)
}
rcParams.update(config)  # 使用config字典中的配置参数更新rcParams,从而修改matplotlib的默认配置
plt.rcParams['axes.unicode_minus'] = False  # 设置matplotlib配置参数,使得在显示负号时不会出现问题,确保负号正常显示
N = 250  # 设置数据点的数量为250
np.random.seed(124)  # 设置随机数种子为124,以确保每次生成的随机数序列相同,方便结果复现
x = 15 * np.random.random(N)  # 生成一个包含N个元素的数组,数组中的元素是0到1之间的随机数,然后乘以15
y = np.sin(x) + 0.25 * np.random.random(N)  # 计算y值,它是x的正弦值加上一个小的随机扰动
z = np.cos(x) + 0.25 * np.random.random(N)  # 计算z值,它是x的余弦值加上一个小的随机扰动
plt.figure(figsize=(6, 6), dpi=110)  # 创建一个新的图形窗口,设置其大小为6x6英寸,分辨率为110像素/英寸
ax = plt.axes(projection='3d')  # 创建一个3D坐标轴的子图,用于绘制3D图形
ax.scatter3D(x, y, z, color='r')  # 在3D坐标轴上绘制散点图,散点的坐标为(x, y, z),颜色为红色
ax.set_xlabel('x', fontsize=20, labelpad=20)  # 设置x轴的标签为'x',字体大小为20,标签与轴之间的距离为20
ax.set_ylabel('y', fontsize=20, labelpad=20)  # 设置y轴的标签为'y',字体大小为20,标签与轴之间的距离为20
ax.set_zlabel('z', fontsize=20, labelpad=20)  # 设置z轴的标签为'z',字体大小为20,标签与轴之间的距离为20
ax.set_box_aspect((2., 1.5, 1.2))  # 设置3D坐标轴的长宽比,这里的比例分别对应x、y、z轴
plt.show()  # 显示图形窗口

14.3绘制3D折线图

14.3.1图像呈现

14.3.2绘图代码

import numpy as np  # 导入numpy库,numpy是一个用于处理数组和进行数值计算的强大Python库。
import matplotlib.pyplot as plt  # 导入matplotlib的pyplot模块,用于绘制二维和三维图形。
from matplotlib import rcParams  # 从matplotlib库中导入rcParams,它用于自定义图形的各种属性。  
# 定义一个字典config,该字典包含用于设置图形字体、大小和其他相关配置参数的键值对。
config = {
    "font.family": 'serif',  # 设置字体族为衬线字体。
    "font.size": 10.5,  # 设置字体大小为10.5。
    "mathtext.fontset": 'stix',  # 设置数学文本的字体集为'stix'。
    "font.serif": ['SimSun']  # 设置衬线字体为'SimSun'(即宋体)。
}

rcParams.update(config)  # 使用config字典中的配置参数更新matplotlib的全局配置参数rcParams。
plt.rcParams['axes.unicode_minus'] = False  # 设置配置参数,确保在图形中正常显示负号。

N =100  # 设定数据点的数量为100。
np.random.seed(124)  # 设置随机数种子为124,以确保每次生成的随机数序列相同。
# 使用linspace函数生成一个包含N个元素的数组,这些元素在0到15之间均匀分布,用于表示x轴的坐标。
xline = np.linspace(0, 15, N)
# 计算yline,它是xline中每个元素的正弦值。
yline = np.sin(xline)
# 计算zline,它是xline中每个元素的余弦值。
zline = np.cos(xline)
# 创建一个新的图形窗口,并设置其大小为9x6英寸,分辨率为110像素/英寸。
fig = plt.figure(figsize=(9, 6), dpi=110)
# 创建一个3D坐标轴的子图,用于绘制3D图形。
ax = plt.axes(projection='3d')
# 在3D坐标轴上绘制由xline、yline和zline指定的折线图。
ax.plot3D(xline, yline, zline)
# 设置x轴的标签。
ax.set_xlabel('x')
# 设置y轴的标签。
ax.set_ylabel('y')
# 设置z轴的标签。
ax.set_zlabel('z')
# 设置3D坐标轴的长宽比,以更好地展示图形的形状。
ax.set_box_aspect((2, 1.5, 1.2))
# 显示图形窗口。
plt.show()

14.4设置3D图视角

14.4.1图像呈现

14.4.2绘图代码

import numpy as np  # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块,用于可视化
from matplotlib import rcParams  # 从matplotlib中导入rcParams,它用于处理matplotlib的配置参数
# 定义一个字典config,其中包含字体、大小和其他相关的配置参数
config = {"font.family": 'serif', "font.size": 10.5, "mathtext.fontset": 'stix', "font.serif": ['SimSun']}
rcParams.update(config)  # 使用config字典中的配置参数更新rcParams
plt.rcParams['axes.unicode_minus'] = False  # 运行配置参数总的轴(axes)正常显示正负号(minus)
N = 250
np.random.seed(124)
x = 15 * np.random.random(N)
y = np.sin(x) + 0.25 * np.random.random(N)
z = np.cos(x) + 0.25 * np.random.random(N)
plt.figure(figsize=(6, 6), dpi=110)
ax = plt.axes(projection='3d')
ax.scatter3D(x, y, z, color='r')
ax.set_xlabel('x', fontsize=20, labelpad=20)
ax.set_ylabel('y', fontsize=20, labelpad=20)
ax.set_zlabel('z', fontsize=20, labelpad=20)
ax.set_box_aspect((2., 1.5, 1.2))
ax.view_init(10, 180) #设置3D图角度,10是仰角,180是方位角
plt.show()

14.5绘制3D三角形曲面图

14.5.1图像呈现

14.5.2绘图代码

import numpy as np  # 导入numpy库,numpy是一个用于处理数组和进行数值计算的强大Python库。
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块pyplot,用于绘制二维和三维图形。
from matplotlib import rcParams  # 从matplotlib库中导入rcParams,它用于自定义图形的各种属性。
# 定义一个字典config,该字典包含用于设置图形字体、大小和其他相关配置参数的键值对。
config = {
    "font.family": 'serif',  # 设置字体族为衬线字体。
    "font.size": 10.5,  # 设置字体大小为10.5。
    "mathtext.fontset": 'stix',  # 设置数学文本的字体集为'stix'。
    "font.serif": ['SimSun']  # 设置衬线字体为'SimSun'(即宋体)。
}
rcParams.update(config)  # 使用config字典中的配置参数更新matplotlib的全局配置参数rcParams。
# 设置配置参数,确保在图形中正常显示负号。
plt.rcParams['axes.unicode_minus'] = False
# 定义数据点的数量
N = 2000
# 设置随机数种子,确保每次生成的随机数序列相同
np.random.seed(124)
# 生成N个0到1之间的随机数,并乘以2π,用于生成极径r
r = 2 * np.pi * np.random.random(N)
# 生成N个0到1之间的随机数,并乘以20π,用于生成角度theta
theta = 20 * np.pi * np.random.random(N)
# 利用极坐标到直角坐标的转换公式计算x和y的坐标
xdata = np.ravel(r * np.sin(theta))
ydata = np.ravel(r * np.cos(theta))
# 根据xdata和ydata计算zdata的值
zdata = np.sin(xdata) + np.cos(ydata)
# 创建一个新的图形窗口,并设置其大小为15x6英寸,分辨率为110像素/英寸
fig = plt.figure(figsize=(15, 6), dpi=110)
# 调整子图之间的空白
plt.subplots_adjust(wspace=0)
# 创建一个3D坐标轴的子图,位置为1行2列中的第1个位置
ax1 = plt.subplot(121, projection='3d')
# 使用plot_trisurf方法绘制3D曲面,并使用'inferno'颜色映射
ax1.plot_trisurf(xdata, ydata, zdata, cmap='inferno')
# 设置x轴的标签
ax1.set_xlabel('x')
# 设置y轴的标签
ax1.set_ylabel('y')
# 设置z轴的标签
ax1.set_zlabel('z')
# 设置3D视角,其中Elevation为40°,Azimuth为100°
ax1.view_init(40, 100)
# 设置3D坐标轴的长宽比
ax1.set_box_aspect((4.5, 4.5, 1.5))
# 设置子图的标题
ax1.set_title('Elevation = 40°, Azimuth = 100°')
# 创建另一个3D坐标轴的子图,位置为1行2列中的第2个位置
ax2 = plt.subplot(122, projection='3d')
# 使用plot_trisurf方法绘制另一个3D曲面,并使用相同的颜色映射
ax2.plot_trisurf(xdata, ydata, zdata, cmap='inferno')
# 设置x轴的标签
ax2.set_xlabel('x')
# 设置y轴的标签
ax2.set_ylabel('y')
# 设置z轴的标签
ax2.set_zlabel('z')
# 设置3D视角,其中Elevation为20°,Azimuth为100°
ax2.view_init(20, 100)
# 设置3D坐标轴的长宽比
ax2.set_box_aspect((4.5, 4.5, 1.5))
# 设置子图的标题
ax2.set_title('Elevation = 20°, Azimuth = 100°')
# 显示图形窗口
plt.show()

14.6绘制3D等高线图

14.6.1图像呈现

14.6.2绘图代码

import numpy as np  # 导入numpy库,numpy是Python的一个强大的数值计算扩展程序库,支持大量的维度数组与矩阵运算。
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块pyplot,用于绘制二维和三维图形。
from matplotlib import rcParams  # 从matplotlib库中导入rcParams,rcParams是一个字典对象,用于处理matplotlib的全局配置参数。
# 定义一个字典config,该字典包含字体、大小和其他相关的配置参数,用于自定义图形的显示样式。
config = {
    "font.family": 'serif',  # 设置字体族为衬线字体。
    "font.size": 15,  # 设置字体大小为15。
    "mathtext.fontset": 'stix',  # 设置数学文本的字体集为'stix'。
    "font.serif": ['SimSun']  # 设置衬线字体为'SimSun'(即宋体)。
}
rcParams.update(config)  # 使用config字典中的配置参数更新matplotlib的全局配置参数rcParams。
plt.rcParams['axes.unicode_minus'] = False  # 设置配置参数,确保在图形中正常显示负号。
N = 100  # 定义数据点的数量,这里用于生成X、Y坐标和对应的Z值。
np.random.seed(3124)  # 设置随机数种子,确保每次生成的随机数序列相同,方便结果复现。
# 生成N个在-2到2之间均匀分布的数,然后加上随机噪声,生成x和y的坐标值。
x = np.linspace(-2, 2, N) + np.random.random(N)
y = np.linspace(-2, 2, N) + np.random.random(N)
# 使用meshgrid函数根据x和y坐标生成网格化的X和Y坐标矩阵。
X, Y = np.meshgrid(x, y)
# 根据X和Y坐标矩阵计算对应的Z值,这里Z是X的正弦值和Y的余弦值的和。
Z = np.sin(X) + np.cos(Y)
# 创建一个新的图形窗口,并设置其大小为9x6英寸,分辨率为110像素/英寸。
fig = plt.figure(figsize=(9, 6), dpi=110)
# 创建一个3D坐标轴的子图。
ax = plt.axes(projection='3d')
# 使用contour3D方法绘制等高线图,cmap='Spectral'表示使用Spectral颜色映射。
ax.contour3D(X, Y, Z, cmap='Spectral')
# 设置x轴的标签。
ax.set_xlabel('x')
# 设置y轴的标签。
ax.set_ylabel('y')
# 设置z轴的标签。
ax.set_zlabel('z')
# 设置3D坐标轴的长宽比。
ax.set_box_aspect((2, 2, 1))
# 设置3D视角,其中Elevation为60°,Azimuth为100°。
ax.view_init(60, 100)
# 设置子图的标题。
ax.set_title('Contour counts = Default, elevation = 60, azimuth = 100')
# 显示图形窗口。
plt.show()

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

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

相关文章

GPT与R 在生态环境领域数据统计分析

原文链接:GPT与R 在生态环境领域数据统计分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247597092&idx2&sn0a7ac5cf03d37c7b4659f870a7b71a77&chksmfa823dc3cdf5b4d5ee96a928a1b854a44aff222c82b2b7ebb7ca44b27a621edc4c824115babe&…

Python(单词识别、汉诺塔、学生信息管理系统、生词本)

一、单词识别 周一到周日的英文依次为:Monday、Tuesday、Wednesday、Thusday、Friday、Saturday和Sunday,这些单词的首字母基本都不相同,在这7个单词的范围之内,通过第一或前两个字母即可判断对应的是哪个单词。 本任务要求编写…

案例分析篇04:数据库设计相关28个考点(1~8)(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12601310.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

Docker 容器化技术:构建高效、可移植的开发环境和部署流程|Docker 的分层设计

容器技术是云原生的核心技术之一,利用容器化技术,可以将微服务以及它所需要的配置、依赖关系、环境变了等都可以便捷地部署到新的服务器节点上,而不用再次重新配置,这就使得微服务具备了强大的可移植性。 二、Docker 的分层设计 …

研发效能DevOps: OpenEuler 部署 drone 持续集成平台

目录 一、实验 1.环境 2.OpenEuler 部署 drone 持续集成平台 二、问题 1.drone登录失败 一、实验 1.环境 (1)主机 表1 主机 系统架构版本IP备注LinuxopenEuler22.03 LTS SP2 192.168.204.145(动态) 192.168.204.141&…

github 中的java前后端项目整合到本地运行

前言: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未…

安卓多个listView拖动数据交换位置和拖动

注意这里只是给出大概思路&#xff0c;具体可以参考修改自己想要的 public class MainActivity extends AppCompatActivity {private ListView listView1;private ListView listView2;private ArrayAdapter<String> adapter1;private ArrayAdapter<String> adapter…

搭建交换机模拟环境及SSH连接,华为NSP软件入门使用教程

搭建交换机模拟环境及SSH连接&#xff0c;华为NSP软件入门使用教程 如果你是通过搜索搜到了这篇文章&#xff0c;那么一定是工作或者学习中需要用交换机&#xff0c;但是又没物理机测试学习&#xff0c;所以需要搭建本地的虚拟环境学习。 这篇文章是我进行交换机命令入门学习写…

阅读欣赏推荐之(三)——纪录片《地平线系列:大数据时代》

现今的我们正处于一个时代转型中&#xff0c;因为科技的发展与互联网的日益强大&#xff0c;数据将逐步取代旧事物&#xff0c;创造出新事物。当今社会以一种前所未有的方式&#xff0c;通过对海量数据进行分析&#xff0c;获得巨大价值的产品和服务&#xff0c;或深刻的洞见。…

Jmeter+Ant+Git/SVN+Jenkins实现持续集成接口测试,一文精通(二)

前言 上篇内容已经介绍接口测试流程以及了解如何用jmeter接口测试&#xff0c;本篇将介绍如何在实战中应用 一、Jmeter接口关联 1.使用正则表达式实现接口关联&#xff08;可以作用于任意值&#xff09; 如果说一个请求里面有多次请求服务器。 2.使用Jsonpath表达式实现接口关…

【CV论文阅读】【计算机视觉中的Transformer应用综述】(1)

0.论文摘要 摘要——自然语言任务的Transformer model模型的惊人结果引起了视觉社区的兴趣&#xff0c;以研究它们在计算机视觉问题中的应用。在它们的显著优点中&#xff0c;与递归网络例如长短期记忆&#xff08;LSTM&#xff09;相比&#xff0c;Transformer能够模拟输入序…

Cocos2dx-lua ScrollView[二]进阶篇

一.概述 本文缩写说明:sv = ScrollView, item代表ScrollView的一个子节点 如果对sv熟系程度还不够,请阅读基础篇: Cocos2dx-lua ScrollView[一]基础篇-CSDN博客 本文介绍sv的一种封装类库,来实现快速创建sv,有如下几个优点: 1.item的位置通过参数控制,提高开发效率…

【MySQL】1.在Centos 7上如何卸载/安装/配置MySQL(保姆级教程)

MySQL 在 Centos 7环境安装 说明&#xff1a; • 安装与卸载中&#xff0c;用户全部切换成为root&#xff0c;⼀旦安装&#xff0c;普通用户能使用的 • 初期练习&#xff0c;mysql不进行用户管理&#xff0c;全部使用root进行&#xff0c;尽快适应mysql语句&#xff0c;后⾯学…

机器学习,剪刀,石头,布

计算机视觉:剪刀,石头,步 TensorFlow AI人工智能及Machine Learning训练图集的下载建立分类模型并用图像进行训练检验模型总结当前AI Machine Learning 异常火爆,希望在MCU上使用机器学习,做图像识别的工作。看到一个剪刀,石头,步的学习程序,给大家分享一下。 TensorFl…

记录一个vue编辑的移动端页面

<template><div class"wrap"><el-form :model"queryParams" ref"queryForm" size"small" :inline"true" label-width"120px"><el-form-item label"班级" prop"classId"…

K8s — PVC|PV Terminating State

在本文中&#xff0c;我们将讨论PV和PVC一直Terminating的状态。 何时会Terminting? 在以下情况下&#xff0c;资源将处于Terminating状态。 在删除Bounded 状态的PVC之前&#xff0c;删除了对应的PV&#xff0c;PV在删除后是Terminting状态。删除PVC时&#xff0c;仍有引用…

使用飞书机器人发送消息与文件

本文默认你已拥有一个机器人&#xff0c;如果没有请点击以下链接创建机器人 检查机器人权限 如果需要跨部门发送消息&#xff0c;检查是否开通跨部门权限 在发布版本时选择作用范围为所有员工 机器人发送消息需要获取以下权限&#xff1a; 通过手机号或邮箱获取用户 ID查看…

ETL的数据挖掘方式

ETL的基本概念 数据抽取&#xff08;Extraction&#xff09;&#xff1a;从不同源头系统中获取所需数据的步骤。比如从mysql中拿取数据就是一种简单的抽取动作&#xff0c;从API接口拿取数据也是。 数据转换&#xff08;Transformation&#xff09;&#xff1a;清洗、整合和转…

Flutter可重排的列表控件ReorderableListView详解

文章目录 ReorderableListView 介绍主要属性使用示例注意事项 ReorderableListView 介绍 ReorderableListView 是 Flutter 中一个可重排的列表控件&#xff0c;允许用户通过拖动来改变列表项的顺序。它继承自 ListView&#xff0c;并提供了一些额外的功能来实现重排功能。 主…

应用方案 | DCDC电源管理芯片MC34063A

DCDC电源管理芯片 MC34063A MC34063A 为一单片 DC-DC 变换集成电路&#xff0c;内含温度补偿的参考电压源&#xff08;1.25V&#xff09;、比较器、能有效限制电流及控制工作周期的振荡器&#xff0c;驱动器及大电流输出开关管等。外配少量元件&#xff0c;就能组成升压、…