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

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

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

相关文章

【SSM】整合原理和配置实战

文章目录 SSM整合是什么?SSM整合核心问题第一问:SSM整合需要几个IoC容器?第二问:每个IoC容器对应哪些类型组件?第三问:IoC容器之间关系和调用方向?第四问:具体多少配置类以及对应容器…

力扣hot100:22.括号生成(回溯)

复习一下: 回溯法解决的问题都可以抽象为树形结构。回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。 对于同一层而言,其儿子都是等价的不同情况,因此当儿…

【Poe】保姆级注册教程

AI聊天机器人已成为技术界的热点。Quora推出了其全新的AI聊天机器人应用——poe,为用户提供了一种新的与人工智能进行互动的方式。与其他常见的AI聊天机器人不同,poe支持多家公司的AI系统,例如OpenAI的ChatGPT和Anthropic的聊天机器人。本教程…

【零基础学习01】嵌入式linux驱动中pinctrl和gpio子系统实现

大家好,为了进一步提升大家对实验的认识程度,每个控制实验将加入详细控制思路与流程,欢迎交流学习。 今天给大家分享一下,linux系统里面pinctrl和gpio子系统控制实验,操作硬件为I.MX6ULL开发板。 第一:pinctrl和gpio子系统简介 Linux系统是一个庞大又完善的系统,如果采用…

Window部署Oracle并实现公网环境远程访问本地数据库

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle,是甲骨文公司的一款关系…

基于单片机的机动车智能远光灯系统设计

目 录 摘 要 I Abstract II 引 言 1 1 主要研究内容及总体设计方案 3 1.1 主要研究内容 3 1.2 系统总体方案选择 3 1.3 系统功能的确定 4 2 硬件电路的设计 5 2.1 单片机控制模块设计 5 2.2 液晶显示模块电路设计 7 2.3 远近灯光电路设计 9 2.4 按键电路设计 9 2.5 超声波电路…

5G与智慧文旅的融合发展:推动旅游业转型升级与可持续发展

随着5G技术的飞速发展和广泛应用,其与智慧文旅的融合发展正成为推动旅游业转型升级与可持续发展的重要力量。5G技术以其高速率、低时延、大连接的特性,为智慧文旅注入了新的活力,助力旅游业实现更高效、更智能、更绿色的发展。本文将深入探讨…

保持长期高效的七个法则(一)7 Rules for Staying Productive Long-Term(1)

Easily the best habit I’ve ever started was to use a productivity system.The idea is simple:organizing all the stuff you need to do (and how you’re going to do it) prevents a lot of internal struggle to get things done. 无疑,我曾经建立过的最好…

AI辅助研发

随着人工智能技术的持续发展与突破,2024年AI辅助研发正成为科技界和工业界瞩目的焦点。从医药研发到汽车设计,从软件开发到材料科学,AI正逐渐渗透到研发的各个环节,变革着传统的研发模式。在这一背景下,AI辅助研发不仅…

【初始MongoDB】MongoDB的使用(对比MySQL)

MongoDB简介 1、NoSQL简介 NoSQL(NoSQL Not Only SQL),意即反SQL运动,指的是非关系型的数据库,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储…

Qt 数据库驱动未装载MYSQL

一、第一部分 0.Qt 连接mysql数据库时报错: QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7 QT连接代码: bool createMysqlConn() {QSqlDatabase sqldb QSqlDatabase::addDatabase(&qu…

如何配置固定TCP公网地址实现远程访问内网MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

Java建造者模式源码剖析及使用场景

一、介绍 Java 中的建造者模式(Builder Pattern)是一种创建型设计模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。该模式主要用于创建一些复杂的对象,这些对象内部由多个部分组成,各部分之间存在着复杂的相互依赖关系。 二、有什么好处&am…

JVM工作原理与实战(四十三):JVM常见面试题目

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、JVM常见面试题目 1.什么是类加载器,有哪些常见的类加载器? 2.什么是双亲委派机制,以及如何打破双亲委派机制? 3.如何判断堆上的对…

Hive超市零售案例

超市零售案例 一、部分数据展示 Fiskars 剪刀| 蓝色,61,中国,华东,杭州,用品,曾惠,2,浙江,办公用品,US-2019-1357144,130 GlobeWeis 搭扣信封| 红色,43,中国,西南,内江,信封,许安,2,四川,办公用品,CN-2019-1973789,125 Cardinal 孔加固材料| 回收,4,中国,西南,内江,装订机,许…

Unity性能优化篇(十) 模型优化之网格合并 Easy Mesh Combine Tool插件使用以及代码实现网格合并

把多个模型的网格合并为一个网格。可以使用自己写代码,使用Unity自带的CombineMeshes方法,也可以使用资源商店的插件,在资源商店搜Mesh Combine可以搜索到相关的插件,例如Easy Mesh Combine Tool等插件。 可大幅度减少Batches数量…

css flex 布局换行

默认使用display: flex;是不换行的,只需要加上flex-wrap: wrap;就行了,效果图 .app-center {display: flex;flex-wrap: wrap;justify-content:flex-start; } 通过上面我们发现虽然时间换行了,但是每行的边距不一样 加上这个就行了&#xff…

Jupyter Notebook使用教程——从Anaconda环境构建到Markdown、LaTex语法介绍

0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。 你是否在视频教程或说明文档或Githu…

软件测试面试:接口自动化测试面试题(含答案+文档)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、json和字典的区别? Json是轻量级的数据交互格式…

ChatGPT 基本用法!ChatGPT4的prompt的使用例子!

授人以鱼,不如授人以渔。这句话在AI领域尤为贴切,尤其是在构建与AI模型交互的prompt(提示)时。OpenAI在Discord官方服务器上设有一个名为prompt-library的频道,这里聚集了各种创意和专业的prompt,涵盖了从写…