【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等…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...
react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架
1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...
k8s从入门到放弃之Pod的容器探针检测
k8s从入门到放弃之Pod的容器探针检测 在Kubernetes(简称K8s)中,容器探测是指kubelet对容器执行定期诊断的过程,以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀” 在JavaScript中,我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时,单纯依赖字符串或数组就显得力不从心了。这时ÿ…...
关于疲劳分析的各种方法
疲劳寿命预测方法很多。按疲劳裂纹形成寿命预测的基本假定和控制参数,可分为名义应力法、局部应力一应变法、能量法、场强法等。 1名义应力法 名义应力法是以结构的名义应力为试验和寿命估算的基础,采用雨流法取出一个个相互独立、互不相关的应力循环&…...
【汇编逆向系列】四、函数调用包含单个参数之Double类型-mmword,movsd,mulsd,addsd指令,总结汇编的数据类型
一、汇编代码 上一节开始,讲到了很多debug编译独有的汇编方式,为了更好的区分release的编译器优化和debug的区别,从本章节开始将会提供debug和release的汇编用作对比 Debugb编译 single_double_param:00000000000000A0: F2 0F 11 44 24 08…...
