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

news/2024/4/29 11:13:28

环境和包:

环境
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轴'].valuesplt.rcParams['figure.facecolor'] = 'lightblue'
# 创建三维坐标轴对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 使用平滑曲面插值方法创建地形图(假设使用样条插值方法)
#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')
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)  # 设置新的刻度列表#计算面积,容积,最高料位等
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('三维平滑曲面地形图--去除无效点(颜色调整)')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 在图形上添加文本
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(-5000,-5000,10000,str)
print(str)
# 改变图形显示的角度
ax.view_init(elev=6, azim=-89)# 设置图形比例,使X、Y轴和面板底部重合
ax.set_aspect('equal', adjustable='box')
plt.show()

效果图: 

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

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

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

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

相关文章

搭建谷歌Gemini

前言 Gemini是Google AI于2023年发布的大型语言模型,拥有强大的文本生成、理解和转换能力。它基于Transformer模型架构,并使用了大量文本和代码数据进行训练。Gemini可以执行多种任务,包括: 生成文本:可以生成各种类…

C语言——简易版扫雷

目录 前言 ​编辑 游戏规则 游戏结构的分析 游戏的设计 使用多文件的好处有以下几点: 游戏代码实现 框架(test.c) game函数(test.c) InitBoard初始化(game.c) Print打印棋盘(g…

IAB视频广告标准《数字视频和有线电视广告格式指南》之 简介、目录及视频配套广告 - 我为什么要翻译介绍美国人工智能科技公司IAB系列(2)

写在前面 谈及到中国企业走入国际市场,拓展海外营销渠道的时候,如果单纯依靠一个小公司去国外做广告,拉渠道,找代理公司,从售前到售后,都是非常不现实的。我们可以回想一下40年前,30年前&#x…

【MySQL】1.在Centos 7上如何卸载/安装/配置MySQL(保姆级教程)

MySQL 在 Centos 7环境安装 说明: • 安装与卸载中,用户全部切换成为root,⼀旦安装,普通用户能使用的 • 初期练习,mysql不进行用户管理,全部使用root进行,尽快适应mysql语句,后⾯学…

四川易点慧电子商务有限公司抖音小店安全正规

在如今网络购物日益普及的时代,消费者对于购物平台的选择越来越挑剔。四川易点慧电子商务有限公司抖音小店以其安全正规的经营模式,赢得了广大消费者的信赖和好评。本文将为您详细介绍四川易点慧电子商务有限公司抖音小店的优势和特点,让您在…

FX110网:泛欧交易所2月份的外汇交易量月环比下降9.6%

欧洲最大的证券交易所泛欧交易所(Euronext)更新了其2024年2月份的交易数据。数据显示,该交易所当月的外汇交易量出现环比下降。 泛欧交易所2024年2月交易概况Euronext FX 2024年2月,泛欧交易所外汇交易市场Euronext FX的交易总额为…