Python 导入Excel三维坐标数据 生成三维曲面地形图(体) 5-3、线条平滑曲面且可通过面观察柱体变化(三)

环境
python:python-3.12.0-amd64
包:
matplotlib 3.8.2
pandas     2.1.4
openpyxl   3.1.2
scipy      1.12.0
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.interpolate import griddata
from matplotlib.colors import ListedColormap
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager
from matplotlib.image import imread
from matplotlib.widgets import Button
from tkinter import messagebox

#解决中文乱码问题
plt.rcParams['font.sans-serif']=['kaiti']
plt.rcParams["axes.unicode_minus"]=False #解决图像中的"-"负号的乱码问题

# 创建自定义颜色调色板
def create_custom_colormap(name, colors):
    colors = np.array(colors)
    cmap = plt.get_cmap(name)
    cmap.set_over(colors[-1])
    cmap.set_under(colors[0])
    cmap.set_bad(colors[0])
    return cmap

# 定义一些颜色
#colors = ['red', 'blue', 'green', 'yellow', 'purple']
colors = ['red', 'orange', 'yellow', 'green', 'blue']
# 创建自定义颜色映射对象
my_colormap = create_custom_colormap('turbo', colors)
# 读取Excel文件
df = pd.read_excel('煤仓模拟参数41.xlsx')
#df = pd.read_excel('煤仓模拟参数222.xlsx')
#去除无效点
# 根据A列和B列分组,并将每组中C列的值更改为该组中C列的最小值
df['Z轴'] = df.groupby(['X轴', 'Y轴'])['Z轴'].transform('min')
#print('数量:',df)
# 提取x、y、z数据
x = df['X轴'].values
y = df['Y轴'].values
z = df['Z轴'].values
plt.rcParams['figure.facecolor'] = 'lightblue'
# 创建三维坐标轴对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 设置figure标题

# 使用平滑曲面插值方法创建地形图(假设使用样条插值方法)
#smoothed_terrain = ax.scatter(x, y, z, cmap='viridis')

# 使用griddata函数进行插值,这里使用最近邻插值法,你也可以选择其他的插值方法
# 插值后的数据用于绘制平滑曲面地形图
grid_x, grid_y = np.mgrid[min(x):max(x):100j, min(y):max(y):100j]
grid_z = griddata((x, y), z, (grid_x, grid_y), method='cubic')
# 设置颜色映射和透明度
cmap = plt.get_cmap('RdYlBu')  # 选择颜色映射
norm = plt.Normalize(vmin=-5, vmax=5)  # 标准化高度值
alpha = norm(grid_z).data  # 计算透明度
colors = cmap(norm(grid_z).data)  # 计算颜色值
# 使用平滑曲面插值后的数据绘制地形图
# 绘制地形图(camp:coolwarm,viridis,plasma,inferno,magma,cividis,rainbow)
cmap = ListedColormap(['blue', 'green', 'yellow', 'orange','Red'])
ax.contourf(grid_x, grid_y, grid_z, levels=300, cmap=my_colormap)
#ax.contourf(grid_x, grid_y, grid_z, levels=60, cmap='viridis')
# 绘制x-y,Z=16452的平面
grid_z1 = griddata((x, y), np.ones(x.shape) * 16452, (grid_x, grid_y), method='cubic')
ax.contourf(grid_x, grid_y, grid_z1,colors='blue')
# 生成圆柱数据,底面半径为r,高度为h。
# 查找列'X'的绝对值等于9000的行,并获取列'Z'中的最小值
h_min = df[(abs(df['X轴']) == 9000) & (df['Z轴'].notnull())]['Z轴'].min()
# 先根据极坐标方式生成数据
u1 = np.linspace(0, 2 * np.pi, 50)  # 把圆分按角度为50等分
h1 = np.linspace(16650, h_min-200, 20)  # 把高度9000均分为20份
x1 = np.outer(np.sin(u1), np.ones(len(h1))*9000)  # x值重复20次
y1 = np.outer(np.cos(u1), np.ones(len(h1))*9000)  # y值重复20次
z1 = np.outer(np.ones(len(u1)), h1)  # x,y 对应的高度

# Plot the surface
ax.plot_surface(x1, y1, z1, cmap=plt.get_cmap('Blues'))
ax.grid(True)

# 添加颜色条
cbar = plt.colorbar(plt.imshow(grid_z, cmap=cmap), ax=ax)
cbar.set_label('Height')
# 读取背景图
img = imread('1.jpeg')
# 添加背景图
ax.imshow(img, alpha=0.5)
# 设置x轴的刻度间隔
ax.set_xticks(np.arange(-9000, 9000, 2500))  # 从-7500到7500,步长为2500

# 设置y轴的刻度间隔
ax.set_yticks(np.arange(-9000, 9000, 2500))  # 从-7500到7500,步长为2500

# 设置z轴的刻度间隔
#ax.set_zticks(np.arange(16452, 36316, 2500))   # 从10000到31000,步长为2500

# 创建包含不规则刻度的数组
z_ticks = np.array([16452,18952,21452,23952,26452,28952,31452,33952,36316])

# 设置z轴刻度间隔
ax.set_zlim([16452, 36316]) # 设置z轴的范围
ax.set_zticks(z_ticks) # 设置z轴刻度的值

# 设置新的刻度列表
ax.set_zticks(z_ticks)  # 设置新的刻度列表

# 设置x轴和y轴的标签为空字符串,并隐藏它们
ax.set_xlabel('')
ax.set_ylabel('')
ax.set_xticks([])
ax.set_yticks([])
# 设置坐标轴的位置和方向
ax.spines['right'].set_color('none')       # 隐藏右侧的坐标轴线
ax.spines['top'].set_color('none')         # 隐藏顶部的坐标轴线
ax.spines['bottom'].set_color('none')       # 隐藏右侧的坐标轴线
ax.spines['left'].set_color('none')         # 隐藏顶部的坐标轴线
#计算面积,容积,最高料位等
h = df['Z轴'].mean()-16452

#print(h)

# 计算圆柱体的体积
#pi = np.pi
#V = np.pi * r**2 * h  # 圆柱体体积公式:πr²h  r 9000  h-16452  983.6  3000上下就是对的
#print(V)

# 计算圆柱体的体积
r=9000
pi = np.pi
V = np.pi * r**2 * h  # 圆柱体体积公式:πr²h  r 9000  h-16452  983.6  3000上下就是对的
#print('V=',V)

def mm3_to_m3(mm3):
    m3 = mm3 / (1000**3)
    return m3

# 测试代码
mm3_value = V  # 1立方米等于1000000立方毫米
m3_value = mm3_to_m3(mm3_value)
print(m3_value)

m3_value_1=m3_value+983.6
print('体积=',m3_value_1)

zl=1.5*m3_value_1
print('质量=',zl)
VP=m3_value_1/6022.72#6022.72为总桶的总体积
print('容积=',VP)

# 找到该列的最大值和最小值
max_value = df['Z轴'].max()
min_value = df['Z轴'].min()
h=h+16342
# 打印结果
print("最高料位=",max_value)
print("最低料位=",min_value)
print("平均料位=",h)
# 添加标题和坐标轴标签
ax.set_title('高度变化显示顶仓、筒和底仓的料的变化')
# 在图形上添加文本
str = "体积="+np.array2string(m3_value_1)+"\n质量="+np.array2string(zl)+"\n容积="+"{:.2%}".format(VP)+"\n最高料位="+np.array2string(max_value)+"\n最低料位="+np.array2string(min_value)+"\n平均料位="+np.array2string(h)
ax.text(-28000,-5000,10000,str)
# 在指定位置添加文本
ax.text2D(-0.3, 0.5, str, transform=ax.transAxes, fontsize=12, color='b')
# 改变图形显示的角度
ax.view_init(elev=30, azim=-73)

# 设置图形比例,使X、Y轴和面板底部重合
ax.set_aspect('equal', adjustable='box')
# 设置图形比例,使X、Z轴重合
ax.set_axis_off()  # 关闭坐标轴

plt.show()

资源下载(分享-->资源分享):

链接:https://pan.baidu.com/s/1UlP0lsma8OWchfV5kstEFQ 
提取码:kdgr

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue-Router路由介绍和使用

vue属于单页面应用,路由就是根据浏览器路径不同,用不同的试图组件替换这个页面内容 开启路由功能 如图在创建项目时候勾选rouler 这样创建好的项目就有路由功能 下一步 不同的访问路径 展示不同的页面内容 路由配置 路由连接组件 浏览器会解析为超链接 …

OpenCV开发笔记(七十六):相机标定(一):识别棋盘并绘制角点

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/136535848 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 红胖子(红模仿…

爬虫练习:获取某网站的房价信息

一、相关网站 二、相关代码 import requests from lxml import etree import csv with open(房天下数据.csv, w, newline, encodingutf-8) as csvfile:fieldnames [名称, 地点,价格,总价,联系电话]writer csv.DictWriter(csvfile, fieldnamesfieldnames)writer.writeheader…

MySQL临时表创建出错(OS errno 13 - Permission denied)

一个客户向我抱怨:在MySQL查询小表没有问题,查询大表出错,下面是他发给我的出错的部分截屏(客户的表名被我隐藏了)。 这里的给出的信息已经比较明显了,是向/tmp目录中创建临时表失败(临时表的路…

在用Java写算法的时候如何加快读写速度

对于解决该方法我们一般如下操作,不需要知道为什么,有模板(个人观点) 使用BufferedReader代替Scanner:Scanner类在读取大量输入时性能较差,而BufferedReader具有更高的读取速度。可以使用BufferedReader的r…

B端系统:漂亮就行。扯淡,漂亮仅占五分之一!

Hi,我是贝格前端工场,接触N多B端系统,也优化升级过N多。在这个过程中,仅仅美观是不够的,所以我拓展出来的B端系统五度评价指标,本篇着重讲易用性指标,欢迎老铁们评论点赞转发,有需求…

安卓studio安装

安卓studio安装 2024.3.11官网的版本(有些翻墙步骤下载东西也解决了) 这次写的略有草率,后面会更新布局的,因为截图量太大了,有需要的小伙伴可以试着接受一下哈哈哈哈 !(https://gitee.com/jiuzheyangbawjf/img/raw/ma…

Node.Js编码注意事项

Node.js 中不能使用 BOM 和 DOM 的 API,可以使用 console 和定时器 APINode.js 中的顶级对象为 global,也可以用 globalThis 访问顶级对象 浏览器端js的组成 Node.js中的JavaScript组成 相比较之下发现只有console与定时器是两个API所共有的&#xff…

【CLIP综述】CLIP在医学影像中的应用(二)

原文传递:CLIP in Medical Imaging: A Comprehensive Survey 其他综述篇:   【SAM综述】医学图像分割的分割一切模型:当前应用和未来方向   【CLIP综述】CLIP在医学影像中的应用(一) 4、基于CLIP的应用&#xff08…

OD_2024_C卷_200分_10、部门人力分配【JAVA】【二分法 + 双指针】

说明 输入数据两行,第一行输入数据3表示开发时间要求,第二行输入数据表示需求工作量大小,输出数据一行,表示部门人力需求。当选择人力为6时,2个需求量为3的工作可以在1个月里完成,其他2个工作各需要1个月完…

​​​​​​​ARCGIS API for Python进行城市区域提取

ArcGIS API for Python主要用于Web端的扩展和开发,提供简单易用、功能强大的Python库,以及大数据分析能力,可轻松实现实时数据、栅格数据、空间数据等多源数据的接入和GIS分析、可视化,同时提供对平台的空间数据管理和组织管理功能…

Visual C++ 2005 可以生成清单信息了

在 Visual C 2005 中,我们可以通过 #pragma 指令来生成你想要的清单信息,这项功能可以简化新版本通用控件的使用。 例如,下面的代码可以指示链接器,将通用控件的新版本(6.0.0.0)链接到应用程序中。 // do not use – see discussi…

01 数据结构引入 和 顺序表

阅读引言: 从本文开始给大家带来我在复习过程中写的数据结构的代码, 分享给需要的同学 一、数据结构引入 1.数据结构解决什么问题 数据结构可以将杂乱无章的数据管理起来, 提高数据的访问效率 计算机处理的对象(数据&#xff09…

2022 年广西职业院校技能大赛高职组《云计算》赛项赛卷

#需要资源或有问题的,可私博主!!! #需要资源或有问题的,可私博主!!! #需要资源或有问题的,可私博主!!! 某企业拟使用 OpenStack 搭建一…

YOLOv8独家改进:backbone改进 | 最新大卷积核CNN架构UniRepLKNet,ImageNet 88% | CVPR2024

💡💡💡本文独家改进:大核卷积一统多种模态!RepLK正统续作UniRepLKNet,代替YOLOv8 Backbone 改进结构图如下: 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡💡💡全网独家首发创新(原创),适…

基于智慧灯杆的智慧城市解决方案(2)

功能规划 智慧照明功能 智慧路灯的基本功能仍然是道路照明, 因此对照明功能的智慧化提升是最基本的一项要求。 对道路照明管理进行智慧化提升, 实施智慧照明, 必然将成为智慧城市中道路照明发展的主要方向之一。 智慧照明是集计算机网络技术、 通信技术、 控制技术、 数据…

WordPress高端后台美化WP Adminify Pro优化版

后台UI美化WP Adminify Pro修改自定义插件,适合建站公司和个人使用,非常高大上,下载地址:WP Adminify Pro优化版 修复记录: 1、修复已知BUG 2、修复手机版兼容问题 3、修复打开速度,原版打开速度太慢 4…

华为数通方向HCIP-DataCom H12-821题库(多选题:121-140)

第121题 以下哪些事件会导致IS-IS产生一个新的LSP? A、引入的IP路由发送变化 B、周期性更新 C、接口开销发生了变化 D、邻接Up或Down 【参考答案】ABCD 【答案解析】 第122题 以下哪些协议既支持网络配置管理又支持网络监控管理? A、Telemetry B、NETCONF C、SNMP D、LLDP …

STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置

STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置前言第1章 设置字体颜色第2章 设置字体大小第3章 设置代码区背景颜色总结 前言 编程软件环境最好就设置一个自己喜欢的界面进行显示,这样看起来会比较舒服些…

重生奇迹MU觉醒弓箭手技能有哪些

1、普攻:向前方射出箭矢,造成一定的物理输出。 2、冰封箭:弓箭手射出一发冰冻的箭矢,造成一定的范围伤害。 3、精灵祝福:可以召唤一只守护精灵,为自己加血治疗。 4、多重箭:弓手射出扇形范围…