当前位置: 首页 > news >正文

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

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 1. 查看文本文件内容 2. 同时查看多个文本文件内容 3. 合并文…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...

高抗扰度汽车光耦合器的特性

晶台光电推出的125℃光耦合器系列产品&#xff08;包括KL357NU、KL3H7U和KL817U&#xff09;&#xff0c;专为高温环境下的汽车应用设计&#xff0c;具备以下核心优势和技术特点&#xff1a; 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计&#xff0c;确保在…...