环境
python:python-3.12.0-amd64
包:
matplotlib 3.8.2
当前限制的旋转范围是0°-60°
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# 读取Excel文件中的空间坐标数据
df = pd.read_excel('煤仓模拟参数.xlsx')
# 假设您的数据在'X'和'Y'列中,高度数据在'Z'列中
x = df['X轴']
y = df['Y轴']
z = df['Z轴'] # 根据您的数据调整此列名
# 创建3D图形对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制地形图
ax.plot_trisurf(x, y, z, cmap='viridis', linewidth=0, antialiased=False)
# 设置x轴的刻度间隔
ax.set_xticks(np.arange(-7500, 7500, 2500)) # 从-7500到7500,步长为2500
# 设置y轴的刻度间隔
ax.set_yticks(np.arange(-7500, 7500, 2500)) # 从-7500到7500,步长为2500
# 设置z轴的刻度间隔
ax.set_zticks(np.arange(10000, 31000, 2500)) # 从10000到31000,步长为2500
# 设置图形的长宽比例
ax.set_box_aspect([1, 1, 0.5])
# 将投影方式设置为正交投影
ax.set_proj_type('ortho')
# 设置初始视角
ax.view_init(elev=30, azim=0)
# 设置y轴范围
ax.set_ylim3d(-10000, 10000)
# 设置z轴范围
ax.set_zlim3d(0, 40000)
# 初始化鼠标交互
ax.mouse_init()
# 定义鼠标移动事件处理函数
def on_move(event):
if event.inaxes == ax:
# 获取当前视角的 elev 角度值
elev = ax.elev - event.ydata / 10
# 将 elev 视角限制在 0 到 60 度之间
elev = max(min(elev, 60), 0)
# 设置新的视角
ax.view_init(elev=elev, azim=ax.azim)
# 限制 elev 的旋转范围在 10 度到 50 度之间
if elev < 10:
elev = 10
ax.view_init(elev=elev, azim=ax.azim)
elif elev > 50:
elev = 50
ax.view_init(elev=elev, azim=ax.azim)
# 绑定鼠标移动事件
fig.canvas.mpl_connect('motion_notify_event', on_move)
# 显示图形
plt.show()
图片资源下载(分享-->python Matplotlib Tkinter图片):
链接:https://pan.baidu.com/s/1vFOU52gG0bgK8RYuj-dzOg
提取码:2oy0