Python数据可视化(七)
绘制 3D 图形
到目前为止,我们一直在讨论有关 2D 图形的绘制方法和绘制技术。3D 图形也是数据可视化的 一个很重要的应用方面,我们接下来就重点讲解有关 3D 图形的实现方法。绘制 3D 图形通常需要导 入 mpl_toolkits 包中的 mplot3d 包的相关模块,如 axes3d 模块,模块 axes3d 中包含类 Axes3D,对象 Axes3D 可以在 2D 的 matplotlib 画布中绘制 3D 图形对象。
一,绘制带颜色标尺的彩色曲面
在 2D 画布中绘制 3D 图形时,绘制的本质就是绘制三维曲面,即由一对有序数对映射成的数据 值和有序数对所组成的三元元组在画布上的描点成面。这个三维曲面不仅可以着色,还可以按照曲 面的高度分别涂上不同的颜色,同时用颜色标尺进行注释,说明高度变化。接下来,我们就讲解带 颜色标尺的彩色曲面的绘制方法。
1.代码示例
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
from mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection="3d")x = np.arange(-3, 3, 0.25)
y = np.arange(-3, 3, 0.25)
x, y = np.meshgrid(x, y)
r = np.sqrt(np.power(x, 2) + np.power(y, 2))
z = np.sin(r)# plot 3d surface
surf = ax.plot_surface(x, y, z,rstride=1,cstride=1,cmap=cm.coolwarm,linewidth=0,antialiased=False)# customize the z axis
ax.set(zlim=(-1, 1))
ax.zaxis.set_major_locator(LinearLocator(7))
ax.zaxis.set_major_formatter(FormatStrFormatter("%3.2f"))# add a color bar mapping values to colors
fig.colorbar(surf, shrink=0.6, aspect=10)plt.show()
2.代码解释
为了绘制 3D 图形,需要从 mpl_toolkits 包里的 mplot3d 包的 axes3d 模块中导入类 Axes3D,实 现在 2D 的 matplotlib 画布中绘制 3D 图形对象的目标。
(1)通过调用“plt.figure()”语句,生成类 Figure 的实例 fig。
(2)向画布 fig 中添加 3D 投影模式的子区,得到可以绘制 3D 图形的坐标轴实例 ax。 接下来,设置 x 轴、y 轴和 z 轴的数据内容。
(3)这样,我们就可以在坐标轴实例 ax 中,调用类 Axes3D 的实例方法 plot_surface()绘制曲 面了。通过参数 rstride 和 cstride 设置曲面上单位曲面的大小,参数 cmap 用于设置曲面补片的颜 色映射表类型。单位曲面(曲面补片)的衔接线的线条宽度设置为 0,以求突出曲面补片的颜色 变化情况。
(4)为了使 z 轴的刻度线和刻度标签更加清晰和直观,使用一组代码对 z 轴的刻度线和刻度标 签进行定制化设置,主要调整刻度线的数量和刻度标签的小数点位数。
(5)向画布中的曲面实例添加颜色标尺,通过参数 shrink 设置颜色标尺的整体大小,通过参数 aspect 设置标尺框的长和宽的比例。 这样,通过上面的 Python 代码,我们就完成了带颜色标尺的彩色曲面的绘制任务。
二,在3D 空间里分层展示投射到指定平面后的2D 柱状图
我们在 2D 平面上可以绘制柱状图,如果要绘制多组数据的柱状图,则可以尝试使用堆叠柱状 图或并列柱状图。但是,如果数据组数过多,那么使用这两种柱状图展示数据的可视化效果就不是 很理想。这时候,我们可以先将多组数据的柱状图投射到指定平面上,再借助指定坐标轴将投射后 的柱状图分层,从而在 3D 空间里实现多组数据的分层展示的 2D 柱状图的绘制任务。
1.代码示例
import matplotlib.pyplot as plt
import numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection="3d")colorsList = ["r", "b", "y"]
yLayersList = [2, 1, 0]for color, layer in zip(colorsList, yLayersList):x = np.arange(10)y = np.random.rand(10)ax.bar(x, y, zs=layer, zdir="y", color=color, alpha=.7)ax.set(xlabel="X", ylabel="Y", zlabel="Z", yticks=yLayersList)plt.show()
2.代码解释
(1)需要从 mpl_toolkits 包里的 mplot3d 包的 axes3d 模块中导入类 Axes3D,实现在 2D 的 matplotlib 画布中绘制 3D 图形对象的目标。
(2)调用模块 pyplot 中的函数 figure(),生成类 Figure 的实例 fig。
(3)向画布 fig 中添加 3D 投影模式的子区,得到可以绘制 3D 图形的坐标轴实例 ax。
(4)分别设置柱状图的柱体颜色和柱状图投射层次的序号,分别存储在列表 colorsList 和 yLayersList 中。
(5)借助内置函数 zip(),获得颜色和层次序号的元组列表,通过 for 循环实现迭代绘制柱状图 的目标。
(6)在 for 循环中,需要重点说明语句块“ax.bar(x,y,zs=layer,zdir="y",color=color,alpha=.7)”的 作用,也就是类 Axes3D 的实例方法 bar()的使用方法。其中,参数 x 表示柱体左边位置的列表;参 数 y 表示柱体高度的列表;参数 zs 是将柱状图进行投射的层次序号;参数 zdir 是将 z 轴用来表示柱 体的高度,即将 y 轴设定成 z 轴;参数 zs 和 zdir 组合使用的效果就是在 y 轴的刻度线位置 2、1 和 0 处所在的与 z 轴所属平面平行的平面上绘制 2D 柱状图;参数 color 用于设置柱体的颜色;参数 alpha 用于设置柱体的透明度。这样,我们就将 2D 柱状图投射到 z 轴所属的平面上,再借助 y 轴分层展示投射到 z 轴所属平面上的 2D 柱状图,从而实现在 3D 空间里分层展示投射到指定平面 后的 2D 柱状图。
(7)通过调用实例方法 set(),统一设置 x 轴、y 轴和 z 轴的坐标轴标签,以及将 y 轴的刻度线位 置设置成投射层次的位置序号。类 Axes 的实例方法 set()是属性批量设置器,也就是说,可以将类 Axes 的若干属性设置一起放在实例方法 set()中来实现。
三,在 3D 空间里绘制散点图
我们可以在 2D 平面内绘制散点图,但在很多时候,出于实际项目需要,需要在 3D 空间里绘制 散点图。在 3D 空间里绘制散点图,就是在 x 轴和 y 轴之外再添加一条 z 轴后,使用三元有序数对在 3D 空间里进行描点。下面,我们就介绍在 3D 空间里绘制散点图的实现方法。
1.代码示例
import matplotlib.pyplot as plt
import numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()ax = fig.add_subplot(projection = '3d')xs = np.random.rand(50) * 10
ys = np.random.rand(50) * 10 + 20
zs1 = np.random.rand(50) * 10
zs2 = np.sqrt(xs ** 2 + ys ** 2)ax.scatter(xs, ys, zs=zs1, zdir="z", c="cornflowerblue", marker="o", s=40)
ax.scatter(xs, ys, zs=zs2, zdir="z", c="purple", marker="^", s=40)ax.set(xlabel="X", ylabel="Y", zlabel="Z")plt.show()
2.代码解释
与前面讲过的导入 3D 绘图模式一样,同样从 mpl_toolkits 包里的 mplot3d 包的 axes3d 模块中导 入类 Axes3D,实现在 2D 的 matplotlib 画布中绘制 3D 图形对象的目标。
(1)调用模块 pyplot 中的函数 figure(),生成类 Figure 的实例 fig。
(2)调用实例方法 add_subplot()获得 3D 模式下的坐标轴实例 ax。
(3)构建一组模拟数据 xs、ys、zs1 和 zs2,用于绘制 3D 空间里的散点图。
(4)调用类 Axes3D 的实例方法 scatter(),实例方法 scatter()的大部分参数与 2D 平面里的实例 方法 scatter()的大部分参数相同。这里需要重点说明的就是参数 zs。参数 zs 是与 xs 和 ys 数组长度 相同的数组,将 z 轴本身作为 z 坐标轴,这样,就会在 z 轴上的 zs 列表里的元素的位置处绘制由 xs 和 ys 的对应位置的元素所组成的有序数对的坐标点。
(5)调用“ax.set(xlabel="X",ylabel="Y",zlabel="Z")”语句,设置 x 轴、y 轴和 z 轴的坐标轴标签。 这样,通过上面的操作步骤,就可以完成在 3D 空间里绘制散点图的数据可视化任务。
相关文章:

Python数据可视化(七)
绘制 3D 图形 到目前为止,我们一直在讨论有关 2D 图形的绘制方法和绘制技术。3D 图形也是数据可视化的 一个很重要的应用方面,我们接下来就重点讲解有关 3D 图形的实现方法。绘制 3D 图形通常需要导 入 mpl_toolkits 包中的 mplot3d 包的相关模块&#x…...

StringMVC
目录 一,MVC定义 二,SpringMVC的基本使用 2.1建立连接 - RequestMapping("/...") 编辑 2.2请求 1.传递单个参数 2.传递多个参数 3.传递对象 4.参数重命名 5.传递数组 6. 传递集合 7.传递JSON数据 8. 获取url中数据 9. 传递文…...
前端基础入门三大核心之HTML篇 —— SVG的viewBox、width和height:绘制矢量图的魔法比例尺【含代码示例】
前端基础入门三大核心之HTML篇 —— SVG的viewBox、width和height:绘制矢量图的魔法比例尺【含代码示例】 基本概念与作用viewBoxwidth和height 代码示例与实践基础示例动态调整示例 不同角度的使用思路保持比例缩放自动适应容器 实际问题与解决方案结语与讨论 在前…...
Java-Zookeeper
zookeeper是什么 一个分布式、开源的分布式应用程序协调服务,具有配置维护、域名服务、分布式同步、组服务等 zookeeper有哪些功能 功能简介集群管理监控节点状态、运行请求等主节点选举主节点挂掉之后会执行新主选举分布式锁zookeeper提供两种锁:独占…...
Godot游戏引擎有哪些优势
哈喽呀,大家好呀,淼淼又来和大家见面啦,众所周知在当今游戏开发领域,各种游戏引擎如雨后春笋般涌现,为开发者提供了丰富的选择。而在这些众多的选择中,Godot游戏引擎以其独特的特性和开放源代码的优势&…...

一张图看懂大模型性价比:能力、价格、并发量全面PK
最近,国内云厂商的大模型掀起一场降价风暴。火山引擎、阿里云、百度云等纷纷宣布降价,部分模型价格降幅据称高达99%,甚至还有些模型直接免费。 五花八门的降价话术,一眼望去遍地黄金。但事实真的如此吗?今天我们就拨开…...
设计井字棋游戏(一)
创建游戏登录注册窗口 用户名admin 密码admin(可自行改变) 主页面 1. 导包 import pickle:导入 pickle 模块,这是一个 Python 的内置模块,用于将 Python 对象序列化和反序列化。序列化是指将对象转换为字节流&am…...

华为手机卡顿(仅针对于部分人来说,我也不清楚是否真的有用)
关机! 之前一段时间手机变得特别卡顿,然后网上搜了一堆教程一点用没有,结果因为昨天下午在考试所以把手机关机了一个多小时,再打开之后手机就变得很流畅,原因不详,但效果显著,如有需要可尝试一…...

7、按钮无法点击
不能点击,打开f12,删除disabled...

开源博客项目Blog .NET Core源码学习(25:App.Hosting项目结构分析-13)
本文学习并分析App.Hosting项目中后台管理页面的文章管理页面。 文章管理页面用于显示、检索、新建、编辑、删除文章数据,以便在前台页面的首页、文章专栏、文章详情页面显示文章数据。文章管理页面附带一新建及编辑页面,以支撑新建和编辑文章数据。…...

第七节 ConfigurationClassParser 源码分析
tips: ConfigurationClassParser 是 Springframework 中的重要类。 本章主要是源码理解,有难度和深度,也枯燥乏味,可以根据实际情况选择阅读。 位置:org.springframework.context.annotation.ConfigurationClassPars…...

零基础代码随想录【Day42】|| 1049. 最后一块石头的重量 II,494. 目标和,474.一和零
目录 DAY42 1049.最后一块石头的重量II 解题思路&代码 494.目标和 解题思路&代码 474.一和零 解题思路&代码 DAY42 1049.最后一块石头的重量II 力扣题目链接(opens new window) 题目难度:中等 有一堆石头,每块石头的重量都是正整…...

2024-5-24 石群电路-15
2024-5-24,星期五,22:15,天气:晴,心情:晴。今天最后一天上班,终于要放返校假啦,开心!!!!!!不过放假也不能耽误…...
功能测试:核心原理、挑战以及解决之道
在软件开发生命周期中,功能测试占据了至关重要的位置。它是确保软件应用按照既定的要求和规格运行的关键测试阶段。功能测试的目的在于验证软件的功能、行为和用户界面等是否达到了业务需求的标准。本文将深入探讨功能测试的概念,执行过程中可能遇到的挑…...

跨境电商赛道,云手机到底能不能化繁为简?
当下国内电商背景: 从零售额的数据来看:随着互联网的普及和消费者购物习惯的改变,国内电商市场规模持续扩大。据相关数据显示,网络消费亮点纷呈,一季度全国网上零售额达到了3.3万亿元,同比增长12.4%。这表…...

linux:信号深入理解
文章目录 1.信号的概念1.1基本概念1.2信号的处理基本概念1.3信号的发送与保存基本概念 2.信号的产生2.1信号产生的五种方式2.2信号遗留问题(core,temp等) 3.信号的保存3.1 信号阻塞3.2 信号特有类型 sigset_t3.3 信号集操作函数3.4 信号集操作函数的使用 4.信号的处理4.1 信号的…...
Android系统的/etc/mkshrc文件
/etc/mkshrc 文件是用于配置 mksh(MirBSD Korn Shell)环境的启动脚本。mksh 是 Android 默认使用的 shell,在 shell 启动时会读取并执行这个文件中的配置。以下是关于 /etc/mkshrc 文件的详细信息及其用途。 /etc/mkshrc 文件的作用 环境配…...

LeetCode199二叉树的右视图
题目描述 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 解析 这一题的关键其实就是找到怎么去得到当前是哪一层级,可以利用队列对二叉树进行层次遍历,但…...
JavaScript 基础
一 JavaScript 的书写形式 1.1 行内式 <input type"button" value"点我一下" onclick"alert(hello akai);" > 注意,JS 中的字符串常量可以用单引号表示,也可以使用双引号表示.HTML 中推荐使用双引号,JS 中推荐使用单引号(使用双引号容易…...

DOS学习-目录与文件应用操作经典案例-type
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 1. 查看文本文件内容 2. 同时查看多个文本文件内容 3. 合并文…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...