python绘制3D瀑布图

news/2024/9/17 23:37:30/ 标签: python, 3d, 开发语言

成品:

3d4402af428b4f9132fe56.png" width="640" />

代码:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import numpy as npdef line_3d(x, y, z, x_label_indexs):"""在y轴的每个点,向x轴的方向延伸出一个折线面:展示每个变量的时序变化。x: x轴,时间维,右边。y: y轴,变量维,左边。z: z轴,数值维。二维矩阵,y列x行。每一行是对应变量的一个时间序列。x_label_indexs: 需要标注的时间点。"""x_num = len(x)y_num = len(y)if z.shape[0] != y_num or z.shape[1] != x_num:return -1# 制作坐标格点(z中每个点对应的x、y坐标)X, Y = np.meshgrid(x, y)# 初始化canvas = plt.figure()  # 创建画布axs = canvas.add_subplot(111, projection='3d')  # 添加三维子图# 若把111改成234,则意思是:创建一个2*3的网格,并在第4个格子中创建一个axes# 绘制折线面for i in range(y_num):  # 遍历# z值线,即实际数据。axs.plot(Y[i], X[i], z[i], color=plt.cm.viridis(i/y_num),linestyle='-', linewidth=1, marker='o', markersize=3, alpha=0.3)# 0值线(z=0),与“地面”连接。axs.plot(Y[i], X[i], np.zeros_like(z[i]), color='gray', alpha=0.5)# 绘制有颜色的平面:本质是填充z值与0值之间的区域。polygon = [[Y[i, 0], X[i, 0], 0],    # 左下[Y[i, -1], X[i, -1], 0],  # 右下]for j in range(x_num-1, -1, -1):  # 依次添加点,使得polygon成为一个完整的闭合多边形polygon.append([Y[i, j], X[i, j], z[i, j]])axs.add_collection3d(Poly3DCollection([polygon], color=plt.cm.viridis(i/y_num), alpha=0.3))# 标注数字(z值)for k in x_label_indexs:axs.text(Y[i, k]-0.05, X[i, k], z[i, k]+0.02, f'{z[i, k]:.2f}',color='black', ha='center', size=7)# 用虚线将需要标注的时间(y)连起来for k in x_label_indexs:axs.plot(Y[:, k], X[:, k], z[:, k], linestyle='--', linewidth=0.8, color='gray')axs.grid()plt.show()if __name__ == '__main__':x = np.arange(5)time = np.arange(1, 15, 2)z = np.array([[0.20, 0.34, 0.38, 0.43, 0.44, 0.50, 0.61],[0.21, 0.40, 0.38, 0.43, 0.60, 0.72, 0.75],[0.22, 0.43, 0.44, 0.60, 0.77, 0.84, 0.92],[0.23, 0.42, 0.44, 0.43, 0.64, 0.77, 0.86],[0.38, 0.42, 0.43, 0.49, 0.55, 0.60, 0.81]])line_3d(time, x, z, [1, 4, 6])


http://www.ppmy.cn/news/1524956.html

相关文章

如何利用命令模式实现一个手游后端架构?

命令模式的原理解读 命令模式的英文翻译是 Command Design Pattern。在 GoF 的《设计模式》一书中,它是这么定义的: The command pattern encapsulates a request as an object, thereby letting us parameterize other objects with different reques…

能力追上博士生,OpenAI发布最强o1系列模型

9月13日凌晨1点,OpenAI发布o1系列模型,包括o1-preview(下称o1预览版)和o1-mini。针对这一消息,该公司创始人Sam Altman在X上表示:“no more patience, jimmy.(需要耐心等待的时刻结束了&#xf…

蓝桥杯DS18B20程序源码

蓝桥杯DS18B20程序源码解析 蓝桥杯,作为一项全国瞩目的电子设计竞赛,其核心挑战在于参赛者需深度融合单片机编程与各类电子元件的应用能力。在众多项目中,涉及DS18B20数字温度传感器的程序源码尤为引人注目,它巧妙地将单片机技术…

开源项目低代码表单FormCreate中ElementPlus表单使用校验规则示例

在开源项目低代码表单FormCreate 中,可以通过 validate 配置项为表单组件设置验证规则。无论是内置的表单组件还是自定义的表单组件,都支持表单校验。本文将详细介绍验证规则的使用方法,并提供一些示例来帮助您更好地理解和应用这些功能。 源…

ISO 21434与网络安全管理系统(CSMS)的协同作用

ISO/SAE 21434与CSMS(网络安全管理系统)之间的关系主要体现在以下几个方面: 提供指导框架:ISO/SAE 21434《道路车辆—网络安全工程》是一项国际标准,它为汽车行业提供了实施网络安全管理系统的国际认可的方法和最佳实…

模板匹配应用(opencv的妙用)

在图像处理领域,模板匹配是一种常用的技术,用于在一幅大图中寻找与给定模板最匹配的区域。OpenCV作为一个强大的计算机视觉库,提供了cv2.matchTemplate()函数来实现模板匹配功能。本文将详细介绍OpenCV中的模板匹配技术,包括其原理…

qmt量化交易策略小白学习笔记第64期【qmt编程之获取获取期权全推数据--code_list全推tick数据】

qmt编程之获取期权数据 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 获取期权全推数据 获取全推tick数据的函数是用户主动调用的工具。所谓"全推tick数据",指的是以t…

Android 应用使用theme处理全局焦点框

背景 我的应用有个需求,要求处理keycode事件,进行焦点移动处理,必须定制指定的焦点框。而系统的焦点框是固定了,为了保证平台的一致性,没办法直接修改。 问题 经过沟通,大部分都是自行修改了自己的backg…

ARM base instruction -- cset

CSET Conditional Set sets the destination register to 1 if the condition is TRUE, and otherwise sets it to 0. 如果条件为TRUE&#xff0c;则条件集将目标寄存器设置为1&#xff0c;否则设置为0。 32-bit variant Applies when sf 0. CSET <Wd>, <…

Spark MLlib模型训练—推荐算法 ALS(Alternative Least Squares)

Spark MLlib模型训练—推荐算法 ALS(Alternative Least Squares) 如果你平时爱刷抖音,或者热衷看电影,不知道有没有过这样的体验:这类影视 App 你用得越久,它就好像会读心术一样,总能给你推荐对胃口的内容。其实这种迎合用户喜好的推荐,离不开机器学习中的推荐算法。 在…

SimPO

添加链接描述 优化点两个&#xff1a; gamma长度正则 gamma 原始DPO把两部分母拿出来是 − l o g π r e f ( w i n ) π r e f ( l o s e ) -log \frac{\pi_{ref}(win)}{\pi_{ref}(lose)} −logπref​(lose)πref​(win)​ 由于构建数据集时常常把不满意的大模型输出作为…

操作系统 ---- 调度算法【先来先服务(FCFS)、最短作业优先(SJF)、最高响应比优先(HRRN)】

目录 一、常见的调度算法 1. 先来先服务&#xff08;FCFS, First-Come, First-Served&#xff09; 2. 最短作业优先&#xff08;SJF, Shortest Job First&#xff09; 3. 优先级调度&#xff08;Priority Scheduling algorithm&#xff0c;PSA&#xff09; 4. 轮转调度&am…

python 函数 封装

封装 函数的参数是&#xff1a;变量 def 函数(参数):print(参数)if __name__ __main__:函数(参数)函数(参数2)函数的参数是&#xff1a; 字典 import requests# 定义一个字典 data {} 地址 "https://webdriveruniversity.com/" 请求方法 getdata["url"…

Hi3519DV500_Uboot环境变量的编译和烧录

Hi3519DV500_Uboot环境变量的编译和烧录 U-Boot 环境变量在嵌入式系统的引导加载程序中扮演着重要的角色。它们用于存储系统启动时所需的配置信息&#xff0c;如启动命令、内核和根文件系统的位置、串口波特率等。以下是一些常用的 U-Boot 环境变量及其用途&#xff1a; bootde…

安宝特案例 | AR如何大幅提升IC封装厂检测效率?

前言&#xff1a;如何提升IC封装厂检测效率&#xff1f; 在现代电子产品的制造过程中&#xff0c;IC封装作为核心环节&#xff0c;涉及到复杂处理流程和严格质量检测。这是一家专注于IC封装的厂商&#xff0c;负责将来自IC制造商的晶圆进行保护、散热和导通处理。整个制程繁琐…

使用vuex模仿el-table

1、vuex 在main.js引入 import Vue from vue; import Vuex from vuex;Vue.use(Vuex);const store new Vuex.Store({state: {// 定义要传递的数据datas: []},mutations: {// 定义修改数据的 mutationSET_DATAS(state, newDatas) {state.datas newDatas;}},actions: {// 定义…

Java面试篇基础部分-Java的类加载机制

JVM的类加载 JVM在运行Java文件的时候,类加载分为5个阶段:加载、验证、准备、解析、初始化。在类初始化加载完成之后,就可以使用这个类的信息了。当这个类不需要使用的时候,就可以从JVM进行卸载。 加载 加载是指JVM读取Class文件的操作,并且根据Class的文件描述创建对应的…

聚鼎科技:现在做装饰画是靠谱的吗

在生活的各个角落&#xff0c;艺术以多种形式存在着&#xff0c;而装饰画作为其中的一种&#xff0c;一直以其独特的魅力填充着我们的世界。但在这个快速变化的时代&#xff0c;许多人会问&#xff1a;现在做装饰画还是一个靠谱的选择吗? 装饰画的市场依旧充满生机。随着人们对…

Java ssm超市订单管理系统(详细文档)

学生选课系统论文 摘要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设小…

Linux从入门到开发实战(C/C++)Day10-线程

1.概念&#xff1a; 线程是一个函数&#xff0c;是os调度的基本单位 Linux内核在2.2版本之前&#xff0c;是没有线程的概念&#xff0c;只有有限个进程&#xff08;4096&#xff09; 在2.4版本中&#xff0c;有了线程的概念&#xff0c;而且可…