【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码

1  mpl_toolkits.mplot3d  功能介绍

  mpl_toolkits.mplot3d 是 Matplotlib 库中的一个子模块,用于绘制和可视化三维图形,包括三维散点图、曲面图、线图等。它提供了丰富的功能来创建和定制三维图形。以下是 mpl_toolkits.mplot3d 的主要功能和功能简介:

  1. 3D 散点图:通过 scatter 函数,你可以绘制三维散点图,用于显示三维数据点的分布和关系。

  2. 3D 曲面图:使用 plot_surface 函数,可以创建三维曲面图,用于可视化三维数据的表面形状。这对于显示函数的三维性质非常有用。

  3. 3D 线图plot 函数允许你绘制三维线图,用于表示数据点之间的连接关系。这对于显示数据随时间或其他变量的变化趋势非常有用。

  4. 3D 条形图:通过 bar3d 函数,你可以创建三维柱状图,用于比较不同类别或组的数据。

  5. 3D 散点图标记和颜色:你可以根据数据的特性来定制散点图的标记形状和颜色,以区分不同的数据点。

  6. 3D 坐标轴定制:你可以设置和定制三维图的坐标轴,包括添加标签、设置刻度和范围等。

  7. 图形样式定制:你可以设置图形的样式,包括标题、图例、背景色、线条样式和颜色等,以使图形更具吸引力和可读性。

  8. 3D 投影mpl_toolkits.mplot3d 支持不同类型的三维投影,包括透视投影和正交投影,以满足不同的可视化需求。

  9. 动画和交互性:你可以在三维图中添加动画效果或交互式元素,以更好地探索数据。

  10. 多图形组合:你可以在同一个三维图中组合多个不同类型的图形,以展示多个数据系列。

  11. 保存图形:最后,你可以将绘制的三维图形保存为图像文件,以便在文档中使用或与他人分享。

        总之,mpl_toolkits.mplot3d 子模块为 Matplotlib 提供了强大的三维可视化工具,可以用于可视化和分析三维数据。根据你的需求,你可以选择不同的图形类型和样式来呈现数据,以便更好地理解和传达你的发现。

在 Matplotlib 的 mpl_toolkits.mplot3d 模块中,绘制 3D 图的一般流程包括以下步骤:

(1)导入必要的库和模块:

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

 (2)创建一个 3D 图形的绘图对象:

fig = plt.figure()

(3) 创建一个 3D 子图:

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

(4) 准备数据:定义 X、Y 和 Z 数据,这些数据将在 3D 图中表示。

  1. 使用相应的 3D 绘图函数来绘制数据,例如:

    • 散点图:ax.scatter(x, y, z, c='color', marker='marker_style', label='label')
    • 曲面图:ax.plot_surface(X, Y, Z, cmap='colormap')
    • 线图:ax.plot(x, y, z, label='label')
    • 柱状图:ax.bar3d(x, y, z, dx, dy, dz, shade=True)

(5)添加坐标轴标签:

ax.set_xlabel('X轴标签') 
ax.set_ylabel('Y轴标签') 
ax.set_zlabel('Z轴标签')

(6)添加标题:

plt.title('3D 图标题')

(7)添加图例(如果需要):

ax.legend()

(8)显示图形:

plt.show()

2 绘制3D散点图

        在matplotlib的mpl_toolkits.mplot3d模块中,你可以使用`scatter`函数绘制多种类型的3D散点图。

下面是一些常见的3D散点图类型:

2.1 绘制单色散点图

        所有的散点都使用相同的颜色。可以通过设置`c`参数指定颜色。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制单色散点图
ax.scatter(x, y, z, c='blue')# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')# 显示图形
plt.show()


2.2 绘制彩色散点图

        不同的散点可以使用不同的颜色。可以通过设置`c`参数为一个具有相同长度的数组来指定每个散点的颜色。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
colors = np.random.rand(100)# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制彩色散点图
ax.scatter(x, y, z, c=colors)# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')# 显示图形
plt.show()


2.3 绘制大小变化散点图

        散点的大小可以根据某个特征进行变化。可以通过设置`s`参数为一个具有相同长度的数组来指定每个散点的大小。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建数据
x = np.random.rand(100)  # x坐标
y = np.random.rand(100)  # y坐标
z = np.random.rand(100)  # z坐标
colors = np.random.rand(100)  # 散点颜色
sizes = np.random.randint(low=50, high=200, size=100)  # 散点大小# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制散点图
ax.scatter(x, y, z, c=colors, s=sizes, alpha=0.8)# 设置坐标轴标签
ax.set_xlabel('X')  # 设置x轴标签
ax.set_ylabel('Y')  # 设置y轴标签
ax.set_zlabel('Z')  # 设置z轴标签# 显示图形
plt.show()


2.4 绘制形状变化散点图

        散点的形状可以根据某个特征进行变化。可以通过设置`marker`参数来指定散点的形状。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
markers = ['o', 's', '^', 'D']# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制形状变化散点图
for i in range(len(x)):ax.scatter(x[i], y[i], z[i], marker=markers[i%len(markers)])# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')# 显示图形
plt.show()


3 绘制3D线图

        使用mpl_toolkits.mplot3d模块中的Axes3D对象绘制3D线图。

3.1 简单线图

        使用`plot`函数绘制简单的曲线。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建数据
x = np.linspace(0, 1, 100)
y = np.sin(2 * np.pi * x)
z = np.cos(2 * np.pi * x)# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制简单线图
ax.plot(x, y, z)# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')# 显示图形
plt.show()


3.2 绘制多线图

        使用`plot`函数绘制多条线并在同一图表中显示。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as npplt.rcParams['font.sans-serif'] = ['SimHei']# 创建示例数据
t = np.linspace(0, 20, 100)  # 时间或X轴数据
x1 = np.sin(t)
y1 = np.cos(t)
z1 = tx2 = np.sin(t) + 2
y2 = np.cos(t) + 2
z2 = t# 创建图形和子图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制第一条线
ax.plot(x1, y1, z1, label='线1', color='blue', linestyle='-', linewidth=2)# 绘制第二条线
ax.plot(x2, y2, z2, label='线2', color='red', linestyle='--', linewidth=2)# 添加标题
plt.title('三维多线图示例')# 添加坐标轴标签
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')# 添加图例
ax.legend()# 显示图形
plt.show()

 

3.3  绘制带标记的线图

        使用`plot`函数,并通过设置`marker`参数来添加线上的标记点。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建数据
x = np.linspace(0, 1, 100)
y = np.sin(2 * np.pi * x)
z = np.cos(2 * np.pi * x)# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制带标记的线图
ax.plot(x, y, z, marker='o')# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')# 显示图形
plt.show()


3.4  绘制立体网格线图

        使用`plot_wireframe`函数在3D空间中绘制网格线图。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X ** 2 + Y ** 2))# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制立体网格线图
ax.plot_wireframe(X, Y, Z)# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')# 显示图形
plt.show()


3.5  绘制等高线图

        使用`contour`或`contourf`函数在3D空间中绘制等高线。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制3D等高线图
ax.contour3D(X, Y, Z, 50, cmap='viridis')# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')# 显示图形
plt.show()


4 绘制3D条形图

        在matplotlib中,由于 ​mpl_toolkits.mplot3d​模块的限制,没有直接绘制3D的条形图的函数。不过你可以使用 ​bar3d​函数绘制类似的3D条形图效果。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建数据
x = [1, 2, 3, 4, 5]  # x轴坐标位置
y = [1, 2, 3, 4, 5]  # y轴坐标位置
z = [0, 3, 2, 5, 1]  # z轴高度,即条形的高度
dx = dy = 0.8  # x和y方向的宽度
dz = z  # 条形的高度
colors = ['red', 'green', 'blue', 'orange', 'purple']  # 颜色列表,一一对应于每个条形# 创建图形和轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制3D条形图,并设置每个条形的颜色
for xi, yi, zi, color in zip(x, y, z, colors):ax.bar3d(xi, yi, 0, dx, dy, zi, color=color)# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')# 显示图形
plt.show()

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

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

相关文章

《动手学深度学习 Pytorch版》 7.1 深度卷积神经网络(AlexNet)

7.1.1 学习表征 深度卷积神经网络的突破出现在2012年。突破可归因于以下两个关键因素: 缺少的成分:数据 数据集紧缺的情况在 2010 年前后兴起的大数据浪潮中得到改善。ImageNet 挑战赛中,ImageNet数据集由斯坦福大学教授李飞飞小组的研究人…

js对象属性

在面向对象的语言中有一个标志,那就是都有类,通过类可以创建任意多个相同属性、方法的对象。在js中没有类的存在,所以js中的对象,相对于类语言中对象有所不同。 js中定义对象为:“无序属性的集合,其属性可…

虹科案例 | LIN/CAN总线汽车零部件测试方案

文章来源:虹科汽车电子 点此阅读原文 虹科的LIN/CAN总线汽车零部件测试方案是一款优秀的集成套装,基于Baby-LIN系列产品,帮助客户高效完成在测试、生产阶段车辆零部件质量、功能、控制等方面的检测工作。 1、汽车零部件测试的重要性&#xf…

乐鑫科技全球首批支持蓝牙 Mesh Protocol 1.1 协议

乐鑫科技 (688018.SH) 非常高兴地宣布,其自研的蓝牙 Mesh 协议栈 ESP-BLE-MESH 现已支持最新蓝牙 Mesh Protocol 1.1 协议的全部功能,成为全球首批在蓝牙技术联盟 (Bluetooth SIG) 正式发布该协议之前支持该更新的公司之一。这意味着乐鑫在低功耗蓝牙无线…

【Java 基础篇】Java Stream 流详解

Java Stream(流)是Java 8引入的一个强大的新特性,用于处理集合数据。它提供了一种更简洁、更灵活的方式来操作数据,可以大大提高代码的可读性和可维护性。本文将详细介绍Java Stream流的概念、用法和一些常见操作。 什么是Stream…

API网关是如何提升API接口安全管控能力的

API安全的重要性 近几年,越来越多的企业开始数字化转型之路。数字化转型的核心是将企业的服务、资产和能力打包成服务(服务的形式通常为API,API又称接口,下文中提到的API和接口意思相同),从而让资源之间形…

怎么在OPPO手机桌面上添加文字?便签桌面插件添加教程

很多年轻女性在选择手机时,都比较青睐于设计时尚靓丽、轻薄且续航好、系统流畅、拍照清晰的OPPO手机,并且OPPO为不同的用户提供了高中低不同价格档位的手机型号,能够满足绝大多数女性消费者的使用需求。 不过有不少OPPO手机用户表示&#xf…

关于项目、项目集、项目组合以及运营管理之间的关系

什么是项目? 【项目】这个名词,其实各位一点都不陌生,各位从小到大在各种报章杂志,甚至是每晚的新闻播报里面,每每都会看到或是听到【项目】这个词语,甚至在各位进入大学,或是研究生的阶段里就…

基于人脸5个关键点的人脸对齐(人脸纠正)

摘要:人脸检测模型输出人脸目标框坐标和5个人脸关键点,在进行人脸比对前,需要对检测得到的人脸框进行对齐(纠正),本文将通过5个人脸关键点信息对人脸就行对齐(纠正)。 一、输入图像…

ORB-SLAM2实时稠密地图,解决运行报段错误(核心已转储)运行数据集时出现段错误,出现可视化界面后闪退(添加实时彩色点云地图+保存点云地图)

高翔的稠密建图仓库 1. git clone https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map.git 2. 去ORB SLAM2里拷贝Vocabulary到/home/cgm/ORBSLAM2_with_pointcloud_map/ORB_SLAM2_modified文件夹下 3. 删除一些build文件夹 删除ORB_SLAM2_modified/Thirdparty/DB…

哈希 -- 位图、布隆过滤器、海量数据处理

目录 一、位图1.1 经典题目1.2 位图概念1.3 位图的应用1.4 关于位图的三个经典问题 二、布隆过滤器2.1 布隆过滤器的提出2.2 布隆过滤器的概念2.3 布隆过滤器的插入2.4 布隆过滤器的查找2.5 布隆过滤器删除2.6 代码实现2.7 布隆过滤器的优点2.8 布隆过滤器的缺陷2.9 布隆过滤器…

TongWeb8下应用忙碌线程监控

问题 : 在系统运行过程中发现TongWeb进程占用CPU过高,需要分析是应用哪里引起的问题。 分析过程(仅限Linux环境): 1. 通过top命令查看TongWeb的java进程占用的CPU情况。 查看误区:不要以为java进程CPU占到398%就是高&#xff0…

MySQL学习笔记12

MySQL 查询语句: 1、查询五子句:(重点) mysql> select */字段列表 from 数据表名称 where 子句 group by 子句 having 子句 order by 子句 limit 子句; 1)where 子句;条件筛选。 2)group…

golang 通过案列感受下内存分析

package main // 声音文件所在的包,每个go文件必须有归属的包 import ("fmt" )// 引入程序中需要用的包,为了使用包下的函数,比如:Printinfunc exchangeNum(num1 int, num2 int){var t intt num1num1 num2num2 t }…

Elasticsearch:什么是向量和向量存储数据库,我们为什么关心?

Elasticsearch 从 7.3 版本开始支持向量搜索。从 8.0 开始支持带有 HNSW 的 ANN 向量搜索。目前 Elasticsearch 已经是全球下载量最多的向量数据库。它允许使用密集向量和向量比较来搜索文档。 矢量搜索在人工智能和机器学习领域有许多重要的应用。 有效存储和检索向量的数据库…

Cortex-M3/M4之SVC和PendSV异常

一、SVC异常 SVC(系统服务调用,亦简称系统调用)用于产生系统函数的调用请求。例如,操作系统不让用户程序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用 SVC 发出对系统服务函数的呼叫请求,以这种方法调用它…

2023华为杯数学建模D题第三问-碳排放路径优化(能源消费结构调整的多目标优化模型构建详细过程+模型假设(可复制))

1.碳排放约束下(人为干预按时碳达峰与碳中和的基准情景)能源消费结构多目标优化模型构建 1.1基本假设 本文的模型设计主要基于以下几个基本假设: (1)能源消费结构调整的根本驱动要素,是对投资耗费的最小化…

威胁的数量、复杂程度和扩散程度不断上升

Integrity360 宣布了针对所面临的网络安全威胁、数量以及事件响应挑战的独立研究结果。 数据盗窃、网络钓鱼、勒索软件和 APT 是最令人担忧的问题 这项调查于 2023 年 8 月 9 日至 14 日期间对 205 名 IT 安全决策者进行了调查,强调了他们的主要网络安全威胁和担忧…

Java流式编程的使用

流式编程的使用步骤 使用流式编程的步骤就是: 设置数据源, 设置数据处理的方式,设置收集结果的方式。 使用filter方法实现过滤条件 例子为下&#xff08;查询年龄大于18的用户&#xff09;: Testpublic void streamTest1() {List<Student> students Arrays.asList(ne…

《JVM》第二篇 JVM内存模型深度剖析与优化

目录 一. JDK体系结构与跨平台特性介绍二. JVM内存模型深度剖析三. 从Jvisualvm来研究下对象内存流转模型四. GC Root与STW机制五. JVM参数设置通用模型 一. JDK体系结构与跨平台特性介绍 二. JVM内存模型深度剖析 按照线程是否共享来划分 TLAB(Thread Local Allocation Buffe…