python matplotlib 三维实体圆柱图

环境
python:python-3.12.0-amd64
包:
matplotlib 3.8.2
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.ticker as tickerdef map_rate(X: list, to_min: float, to_max: float) -> list:"""区间映射Attribute:- X: 需要映射的列表- to_min: 要映射到的最小值- to_max: 要映射到的最大值"""x_min = min(X)x_max = max(X)return list([int(round(to_min + ((to_max - to_min) / (x_max - x_min)) * (i - x_min), 1)) for i in X])# rainbow色带
def rainbow(x):# rainbow色带data = [(125, 0, 255), (99, 0, 255), (80, 0, 255), (70, 0, 255), (60, 0, 255), (50, 0, 255), (40, 0, 255),(30, 0, 255), (20, 0, 255), (10, 0, 255), (4, 0, 255), (0, 2, 255), (0, 7, 255), (0, 11, 255), (0, 16, 255), (0, 20, 255), (0, 25, 255), (0, 29, 255), (0, 34, 255), (0, 38, 255), (0, 43, 255), (0, 47, 255),(0, 52, 255), (0, 56, 255), (0, 61, 255), (0, 65, 255), (0, 70, 255), (0, 74, 255), (0, 79, 255), (0, 83, 255), (0, 88, 255), (0, 92, 255), (0, 97, 255),(0, 101, 255), (0, 106, 255), (0, 110, 255), (0, 115, 255), (0, 119, 255), (0, 124, 255), (0, 128, 255), (0, 133, 255), (0, 137, 255), (0, 142, 255), (0, 146, 255), (0, 151, 255),(0, 155, 255), (0, 160, 255), (0, 164, 255), (0, 169, 255), (0, 173, 255), (0, 178, 255), (0, 182, 255), (0, 187, 255), (0, 191, 255), (0, 196, 255), (0, 200, 255), (0, 205, 255),(0, 209, 255), (0, 214, 255), (0, 218, 255), (0, 223, 255), (0, 227, 255), (0, 232, 255), (0, 236, 255), (0, 241, 255), (0, 245, 255), (0, 250, 255), (0, 255, 255), (0, 255, 245),(0, 255, 236), (0, 255, 226), (0, 255, 217), (0, 255, 208), (0, 255, 198), (0, 255, 189), (0, 255, 179), (0, 255, 175), (0, 255, 165), (0, 255, 156), (0, 255, 146), (0, 255, 137), (0, 255, 128), (0, 255, 118), (0, 255, 109), (0, 255, 99), (0, 255, 90), (0, 255, 76), (0, 255, 66), (0, 255, 62), (0, 255, 57), (0, 255, 47), (0, 255, 38), (0, 255, 29), (0, 255, 19), (0, 255, 10), (0, 255, 0), (7, 255, 0), (16, 255, 0), (25, 255, 0), (34, 255, 0), (43, 255, 0), (52, 255, 0), (61, 255, 0),(70, 255, 0), (79, 255, 0), (88, 255, 0), (97, 255, 0), (106, 255, 0), (115, 255, 0), (124, 255, 0),(133, 255, 0), (142, 255, 0), (151, 255, 0), (160, 255, 0), (169, 255, 0), (178, 255, 0), (187, 255, 0), (200, 255, 0), (209, 255, 0), (218, 255, 0),(227, 255, 0), (236, 255, 0), (245, 255, 0), (254, 255, 0), (255, 252, 0), (255, 247, 0), (255, 243, 0), (255, 238, 0), (255, 234, 0), (255, 229, 0), (255, 225, 0), (255, 220, 0), (255, 216, 0), (255, 211, 0),(255, 206, 0), (255, 202, 0), (255, 197, 0), (255, 193, 0), (255, 188, 0), (255, 184, 0), (255, 179, 0), (255, 175, 0), (255, 170, 0), (255, 165, 0), (255, 161, 0), (255, 156, 0),(255, 152, 0), (255, 147, 0), (255, 143, 0), (255, 138, 0), (255, 134, 0), (255, 129, 0), (255, 124, 0), (255, 120, 0), (255, 115, 0), (255, 111, 0), (255, 106, 0), (255, 102, 0),(255, 97, 0), (255, 93, 0), (255, 88, 0), (255, 83, 0), (255, 79, 0), (255, 74, 0), (255, 70, 0), (255, 65, 0), (255, 61, 0), (255, 56, 0), (255, 52, 0), (255, 47, 0),(255, 42, 0), (255, 38, 0), (255, 33, 0), (255, 29, 0), (255, 24, 0), (255, 20, 0)]co = map_rate(x, 0, 175)return np.array(list(data[i] for i in co))# 求中点
def midpoints(x):sl = ()for i in range(x.ndim):x = (x[sl + np.index_exp[:-1]] + x[sl + np.index_exp[1:]]) / 2.0sl += np.index_exp[:]return x# 归一化函数
def normalize(data):mx = np.max(data) * np.ones(data.shape)mn = np.min(data) * np.ones(data.shape)return (data - mn) / (mx - mn)# 定义应力与半径的关系
def Mises(r):return np.round(r * 2, 2)  # 计算von mises应力,并保留小数点后两位# 定义圆柱的参数
R = 9000  # 圆柱的半径
H = 10000  # 圆柱的高
# 网格点数量
nr = 19j  # 沿半径分几层
ntheta = 25j  # >=4
nh = 9j
# 转换坐标系,并求中点
r, theta, z = np.mgrid[0:R:nr, 0:np.pi * 2:ntheta, 0:H:nh]
x = r * np.cos(theta)
y = r * np.sin(theta)rc, thetac, zc = midpoints(r), midpoints(theta), midpoints(z)# 填充网格
a, b, c = rc.shape
rr = list(rc[:, 0, 0])
sphere = np.zeros((a, b, c)) == 0# 设置颜色
hsv = np.zeros(sphere.shape + (3,))
r_color1 = rainbow(rr)
r_color2 = normalize(r_color1)
rgb_r = r_color2[:, 0]
rgb_g = r_color2[:, 1]
rgb_b = r_color2[:, 2]
for i in range(a):hsv[i, ..., 0] = rgb_r[i] * np.ones((b, c))hsv[i, ..., 1] = rgb_g[i] * np.ones((b, c))hsv[i, ..., 2] = rgb_b[i] * np.ones((b, c))# 求应力
mises_r = np.linspace(0, R, a)
mises = Mises(mises_r)
# 画图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.voxels(x, y, z, sphere,facecolors=hsv,edgecolors=np.clip(2 * hsv - 0.5, 0, 1),linewidth=0.5)
ax.set_xlabel('mm')
ax.set_ylabel('mm')
ax.set_zlabel('mm')
# 画 colorbar
ax1 = fig.add_axes([0.02, 0.10, 0.03, 0.80])
cmap = mpl.cm.rainbow
norm = mpl.colors.Normalize(vmin=min(mises), vmax=max(mises))
cb = mpl.colorbar.ColorbarBase(ax1, cmap=cmap,norm=norm,orientation='vertical')tick_locator = ticker.MaxNLocator(nbins=len(r))  # colorbar上的刻度值个数
cb.locator = tick_locator
cb.set_ticks(mises)
cb.update_ticks()
cb.set_label('von Mises')  # colorbar标签
plt.show()

注:

自定义颜色名称

'Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r',
 'CMRmap', 'CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 'Grays', 'Greens', 'Greens_r', 'Greys', 'Greys_r', 'OrRd', 'OrRd_r', 'Oranges', 'Oranges_r', 'PRGn', 'PRGn_r',
 'Paired', 'Paired_r', 'Pastel1', 'Pastel1_r', 'Pastel2', 'Pastel2_r', 'PiYG', 'PiYG_r', 'PuBu', 'PuBuGn', 'PuBuGn_r', 'PuBu_r', 'PuOr', 'PuOr_r', 'PuRd', 'PuRd_r', 'Purples',
 'Purples_r', 'RdBu', 'RdBu_r', 'RdGy', 'RdGy_r', 'RdPu', 'RdPu_r', 'RdYlBu', 'RdYlBu_r', 'RdYlGn', 'RdYlGn_r', 'Reds', 'Reds_r', 'Set1', 'Set1_r', 'Set2', 'Set2_r',
 'Set3', 'Set3_r', 'Spectral', 'Spectral_r', 'Wistia', 'Wistia_r', 'YlGn', 'YlGnBu', 'YlGnBu_r', 'YlGn_r', 'YlOrBr', 'YlOrBr_r', 'YlOrRd', 'YlOrRd_r', 'afmhot',
 'afmhot_r', 'autumn', 'autumn_r', 'binary', 'binary_r', 'bone', 'bone_r', 'brg', 'brg_r', 'bwr', 'bwr_r', 'cividis', 'cividis_r', 'cool', 'cool_r', 'coolwarm',
 'coolwarm_r', 'copper', 'copper_r', 'cubehelix', 'cubehelix_r', 'flag', 'flag_r', 'gist_earth', 'gist_earth_r', 'gist_gray', 'gist_gray_r', 'gist_grey', 'gist_heat',
 'gist_heat_r', 'gist_ncar', 'gist_ncar_r', 'gist_rainbow', 'gist_rainbow_r', 'gist_stern', 'gist_stern_r', 'gist_yarg', 'gist_yarg_r', 'gist_yerg', 'gnuplot', 'gnuplot2',
 'gnuplot2_r', 'gnuplot_r', 'gray', 'gray_r', 'grey', 'hot', 'hot_r', 'hsv', 'hsv_r', 'inferno', 'inferno_r', 'jet', 'jet_r', 'magma', 'magma_r', 'nipy_spectral',
 'nipy_spectral_r', 'ocean', 'ocean_r', 'pink', 'pink_r', 'plasma', 'plasma_r', 'prism', 'prism_r', 'rainbow', 'rainbow_r', 'seismic', 'seismic_r', 'spring', 'spring_r',
 'summer', 'summer_r', 'tab10', 'tab10_r', 'tab20', 'tab20_r', 'tab20b', 'tab20b_r', 'tab20c', 'tab20c_r', 'terrain', 'terrain_r', 'turbo', 'turbo_r', 'twilight', 'twilight_r',
 'twilight_shifted', 'twilight_shifted_r', 'viridis', 'viridis_r', 'winter', 'winter_r' 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

撰写新闻报道的技巧和方法有哪些?

在信息爆炸的时代,新闻报道的质量和水平直接影响着公众对事件的认知和理解,企业通过撰写新闻稿并投放从而来达到宣传推广的目的。如何撰写一篇高质量的新闻报道呢?本文伯乐网络传媒将结合热门话题,探讨新闻报道的技巧和方法。 一、…

Nginx----高性能的WEB服务端(二)

一、高级配置 1、网页的状态页 基于nginx 模块 ngx_http_stub_status_module 实现,在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module,否则配置完成之后监测会是提示语法错误注意: 状态页显示的是整个服务器的状态,而非虚拟主机的…

如何进行App性能测试?iTest工具助力你轻松实现!

引言 如何使用iTest工具进行App性能测试。 在如今这个高度竞争的移动应用市场中,用户对于应用程序的体验需求越来越高,而良好的性能表现则是实现这一目标的关键。 因此,App性能测试已经成为了开发人员必备的技能之一。然而,很多…

(HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕

一、电路接法 电路接法参照江科大视频。 二、相关代码及文件 说明:代码采用hal库,通过修改江科大代码实现。仅OLED.c文件关于引脚定义作了hal库修改,并将宏定义OLED_W_SCL(x)、OLED_W_SDA(x)作了相关修改。 1、OLED.c void OLED_I2C_Init(voi…

【汽车电子】万字详解汽车标定与XCP协议

XCP协议基础 文章目录 XCP协议基础一、引言1.1 什么是标定1.2 什么时候进行标定1.3 标定的意义 二、XCP协议简介2.1 xcp简介2.2 XCP如何加快开发过程?2.3 XCP的主要作用 三、XCP工作过程3.1 工作过程3.2 通讯模型3.3 测量与标定 四、XCP报文解析4.1 数据包报文格式4…

【C++进阶】STL容器--stack和queue深度剖析优先队列适配器原理

目录 前言 1. 容器的使用 1.1 stack 1.2 queue 2. 什么是适配器 3. stack&&queue底层实现 4. deque的简单介绍 4.1 deque的缺陷 5. priority_queue 思考 6. priority_queue的实现 前言 栈和队列在C语言中大家都有所了解,C语言的栈和队列都是我们手动去…

js:通过input标签或Drag拖拽文件实现浏览器文件上传获取File文件对象

文档 https://developer.mozilla.org/zh-CN/docs/Web/API/Filehttps://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/drag_event 通过读取文件可以获取File对象的信息 lastModified: 1707210706000 lastModifiedDate: Tue Feb 06 2024 17:11:46 GMT0800 (中国标准…

NeurIPS 2023 Spotlight | VoxDet:基于3D体素表征学习的新颖实例检测器

本文提出基于3D体素表征学习的新颖实例检测器VoxDet。给定目标实例的多视图,VoxDet建立该实例的三维体素表征。在更加杂乱的测试图片上,VoxDet使用体素匹配算法检测目标实例。实验表明,VoxDet中的三维体素表征与匹配比多种二维特征与匹配要更…

Linux进程 ----- 信号处理

前言 从信号产生到信号保存,中间经历了很多,当操作系统准备对信号进行处理时,还需要判断时机是否 “合适”,在绝大多数情况下,只有在 “合适” 的时机才能处理信号,即调用信号的执行动作。 一、信号的处理…

linux系统---nginx基础

目录 一、Nginx的概念 二、Nginx常用功能 1、HTTP(正向)代理,反向代理 1.1正向代理 1.2 反向代理 2、负载均衡 2.1 轮询法(默认方法) 2.2 weight权重模式(加权轮询) 2.3 ip_hash 3、web缓存 三、基础特性 四…

基于SpringBoot+Apache ECharts的前后端分离外卖项目-苍穹外卖(十八)

数据展示 1. Apache ECharts1.1 介绍1.2 入门案例 2. 营业额统计2.1 需求分析和设计2.1.1 产品原型2.1.2 接口设计 2.2 代码开发2.2.1 VO设计2.2.2 Controller层2.2.3 Service层接口2.2.4 Service层实现类2.2.5 Mapper层 2.3 功能测试 3. 用户统计3.1 需求分析和设计3.1.1 产品…

【人脸朝向识别与分类预测】基于PNN神经网络

课题名称:基于PNN神经网络的人脸朝向识别分类 版本日期:2024-02-20 运行方式:直接运行PNN0503.m文件 代码获取方式:私信博主或 QQ:491052175 模型描述: 采集到一组人脸朝向不同角度时的图像,图像来自不…

【Spring】事务总结

目录 1. 什么是事务? 2. 事务的特性(ACID)了解么? 3. 详谈 Spring 对事务的支持 3.1. Spring 支持两种方式的事务管理 1).编程式事务管理 2)声明式事务管理 3.2. Spring 事务管理接口介绍 3.2.1. PlatformTransactionManager:事务管理…

投资黄金在哪里买比较好?

黄金,作为一种传统的避险资产,历来受到投资者的青睐。在全球经济波动的大背景下,黄金的价值愈发凸显。那么,投资黄金在哪里买比较好呢?本文将重点探讨在香港黄金平台投资黄金的优势,并以金田金业为例&#…

Powershell中conda init失效、无法使用conda activate的问题

起因 近期折腾了一下Windows Terminal,安装配置了Powershell 7.3,然后发现conda activate在Powershell中用不了了,conda init powershell不起作用,conda init cmd.exe没有问题 分析 因为powershell的profile.ps1文件路径中存在…

ELK 简介安装

1、概念介绍 日志介绍 日志就是程序产生的,遵循一定格式(通常包含时间戳)的文本数据。 通常日志由服务器生成,输出到不同的文件中,一般会有系统日志、 应用日志、安全日志。这些日志分散地存储在不同的机器上。 日志…

网络层的DDoS攻击与应用层的DDoS攻击之间的区别

DDoS攻击(即“分布是拒绝服务攻击”),是基于DoS的特殊形式的拒绝服务攻击,是一种分布式、协作的大规模攻击方式,主要瞄准一些企业或政府部门的网站发起攻击。根据攻击原理和方式的区别,可以把DDoS攻击分为两…

The Grapes NFT 概览与数据分析

作者:stellafootprint.network 编译:cicifootprint.network 数据源:The Grapes NFT Collection Dashboard The Grapes 是一个有趣且具有吸引力的 NFT 收藏集合,包含 3,333 个精心制作的 NFT。这个 NFT 项目会在 2024 年再创高…

linux僵尸进程

僵尸进程(Zombie Process)是指在一个进程终止时,其父进程尚未调用wait()或waitpid()函数来获取该进程的终止状态信息,导致进程的资源(如进程表中的记录)仍然保留在系统中的一种状态。 当一个进程结束时&am…

GO数组解密:从基础到高阶全解

在本文中,我们深入探讨了Go语言中数组的各个方面。从基础概念、常规操作,到高级技巧和特殊操作,我们通过清晰的解释和具体的Go代码示例为读者提供了全面的指南。无论您是初学者还是经验丰富的开发者,这篇文章都将助您更深入地理解…