【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码
1 mpl_toolkits.mplot3d 功能介绍
mpl_toolkits.mplot3d 是 Matplotlib 库中的一个子模块,用于绘制和可视化三维图形,包括三维散点图、曲面图、线图等。它提供了丰富的功能来创建和定制三维图形。以下是 mpl_toolkits.mplot3d 的主要功能和功能简介:
3D 散点图:通过
scatter函数,你可以绘制三维散点图,用于显示三维数据点的分布和关系。3D 曲面图:使用
plot_surface函数,可以创建三维曲面图,用于可视化三维数据的表面形状。这对于显示函数的三维性质非常有用。3D 线图:
plot函数允许你绘制三维线图,用于表示数据点之间的连接关系。这对于显示数据随时间或其他变量的变化趋势非常有用。3D 条形图:通过
bar3d函数,你可以创建三维柱状图,用于比较不同类别或组的数据。3D 散点图标记和颜色:你可以根据数据的特性来定制散点图的标记形状和颜色,以区分不同的数据点。
3D 坐标轴定制:你可以设置和定制三维图的坐标轴,包括添加标签、设置刻度和范围等。
图形样式定制:你可以设置图形的样式,包括标题、图例、背景色、线条样式和颜色等,以使图形更具吸引力和可读性。
3D 投影:
mpl_toolkits.mplot3d支持不同类型的三维投影,包括透视投影和正交投影,以满足不同的可视化需求。动画和交互性:你可以在三维图中添加动画效果或交互式元素,以更好地探索数据。
多图形组合:你可以在同一个三维图中组合多个不同类型的图形,以展示多个数据系列。
保存图形:最后,你可以将绘制的三维图形保存为图像文件,以便在文档中使用或与他人分享。
总之,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 图中表示。
-
使用相应的 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()

相关文章:
【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码
1 mpl_toolkits.mplot3d 功能介绍 mpl_toolkits.mplot3d 是 Matplotlib 库中的一个子模块,用于绘制和可视化三维图形,包括三维散点图、曲面图、线图等。它提供了丰富的功能来创建和定制三维图形。以下是 mpl_toolkits.mplot3d 的主要功能和功能简介&am…...
十六,镜面IBL--预滤波环境贴图
又到了开心的公式时刻了。 先看看渲染方程 现在关注第二部分,镜面反射。 其中 这里很棘手,与输入wi和输出w0都有关系,所以,再近似 其中第一部分,就是预滤波环境贴图,形式上与前面的辐照度图很相似&#…...
信息安全:恶意代码防范技术原理.
信息安全:恶意代码防范技术原理. 恶意代码的英文是 Malicious Code, 它是一种违背目标系统安全策略的程序代码,会造成目标系统信息泄露、资源滥用,破坏系统的完整性及可用性。 目录: 恶意代码概述: (1&a…...
开源媒体浏览器Kyoo
什么是 Kyoo ? Kyoo 是一款开源媒体浏览器,可让您流式传输电影、电视节目或动漫。它是 Plex、Emby 或 Jellyfin 的替代品。Kyoo 是从头开始创建的,它不是一个分叉。一切都将永远是免费和开源的。 软件特性: 管理您的电影、电视剧…...
人脸解锁设备时出现相机报错
(1)背景分析 这是项目当中实际遇到的问题,如下代码仅用作分析和记录。 现在问题的现象是:刚亮屏大概在2s以内对着人脸一般是能解锁的,但是超过2s之后在对着人脸,是无法解锁成功的。 (2&#…...
【广州华锐互动】利用VR开展工业事故应急救援演练,确保救援行动的可靠性和有效性
在工业生产中,事故的突发性与不可预测性常常带来巨大的损失。传统的应急演练方式往往存在场地限制、成本高、效果难以衡量等问题。然而,随着虚拟现实(VR)技术的快速发展,VR工业事故应急救援演练应运而生,为…...
还不知道数据类岗位的相关技能和职责吗?涤生大数据告诉你(二)
续接上文:还不知道数据类岗位的相关技能和职责吗?涤生大数据告诉你(一) 1.数据治理工程师 工作职责 数据治理工程师的工作职责主要包括以下几个方面: 1. 数据管理策略制定:制定和实施数据管理策略&#…...
常见应用层协议
一.HTTP(超文本传输协议) HTTP 和 HTTPS 二.FTP(文件传输协议) 三.SMTP(简单邮件传输协议) 四.POP3(邮局协议版本3) 五.IMAP(互联网消息访问协议) 六.DNS&am…...
解决docker容器无法关闭的问题
一般正常关闭: docker stop 容器ID解决方法 方法1:强制停止docker kill 容器ID方法2:直接重启dockersudo service docker stop方法3:直接删除容器,重新创建docker rm -f my_container...
2023-09-27 LeetCode每日一题(餐厅过滤器)
2023-09-27每日一题 一、题目编号 1333. 餐厅过滤器二、题目链接 点击跳转到题目位置 三、题目描述 给你一个餐馆信息数组 restaurants,其中 restaurants[i] [idi, ratingi, veganFriendlyi, pricei, distancei]。你必须使用以下三个过滤器来过滤这些餐馆信息…...
梯度下降法(SGD)原理
目录 梯度下降法(SGD)原理:求偏导 1. 梯度(在数学上的定义) 2. 梯度下降法迭代步骤 BGD批量梯度下降算法 BGD、SGD在工程选择上的tricks 梯度下降法(SGD)原理:求偏导 1. 梯度(在数学上的定义) 表示某一函数在该点处的方向导数沿着该方向取得最大值…...
QQ表情包存储位置解析
一些常见的设备和系统的QQ表情包存储位置: Windows系统: 路径:C:\Users[用户名]\Documents\Tencent Files[QQ号码]\Image\Image\CustomFace 在这个文件夹中,您可以找到所有自定义的QQ表情包。 Android系统: 路径&am…...
软件架构的演化和维护
软件架构的演化和维护 定义 定义 顶不住了,刷题去了,不搞这个了,想吐。。。...
C语言数组和指针笔试题(四)(一定要看)
目录 二维数组例题一例题二例题三例题四例题五例题六例题七例题八例题九例题十例题十一 结果 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒个人主页 🥸🥸🥸C语言 🐿️…...
FragmentManager is already executing transactions
本文解决问题: java.lang.IllegalStateException: FragmentManager is already executing transactions 问题背景描述: 在Fragment中 用tablayoutviewpagerfragment,即Fragment嵌套Fragment场景、或者ViewPager2嵌套ViewPager2时。 执行生命…...
Matlab中clear,close all,clc功能详细说明
背景: 我们在写matlab程序时,首行总是先敲入:clear; close all; clc;,但你真的知道这三句话的具体作用嘛,下面进行详细说明和演示。 一、clear的功能 clear的功能:清理工作区变量,不清理前是…...
Typora安装无需破解免费使用
Typora简介: 在介绍Typora软件之前,需要先介绍一下MARKDOWN。 MARKDOWN是一种轻量型标记语言,它具有“极简主义”、高效、清晰、易读、易写、易更改纯文本的特点。 Typora 是一款支持实时预览的 Markdown 文本编辑器。它有 OS X、Windows、…...
LuatOS-SOC接口文档(air780E)--errDump - 错误上报
示例 -- 基本用法, 10分钟上报一次,如果有的话 if errDump thenerrDump.config(true, 600) end-- 附开源服务器端: https://gitee.com/openLuat/luatos-devlogerrDump.dump(zbuff, type, isDelete) 手动读取异常日志,主要用于用户将日志发送给自己的服务器而不是I…...
低代码平台如何助力国内企业数字化转型?
数字化是什么 数字化(Digitalization)是将许多复杂多变的信息转变为可以度量的数字、数据,再以这些数字、数据建立起适当的数字化模型,把它们转变为一系列二进制代码,引入计算机内部,进行统一处理…...
SI3262—高度集成的低功耗SOC芯片
Si3262是一款高度集成的低功耗SOC芯片,其集成了基于RISC-V核的低功耗MCU和工作在13.56MHz的非接触式读写器模块。 MCU模块具有低功耗、Low Pin Count、宽电压工作范围,集成了13/14/15/16位精度的ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC、TSC等…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
