使用Matplotlib实现3D图形的鼠标滚轮缩放功能
创作时间:
作者:
@小白创作中心
使用Matplotlib实现3D图形的鼠标滚轮缩放功能
引用
CSDN
1.
https://blog.csdn.net/schuberta/article/details/140928068
在使用Matplotlib绘制3D图形时,虽然默认支持通过鼠标拖拽变换视角,但缩放功能却需要通过工具栏按钮实现,不够便捷。本文将介绍如何通过捕捉鼠标滚轮事件,实现3D图形的动态缩放功能。
一 源代码
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建一个新的figure
fig = plt.figure()
# 添加一个3d坐标轴
ax = fig.add_subplot(111, projection='3d')
# 定义数据
X = np.linspace(-5, 5, 100)
Y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(X, Y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 绘制曲面图
surf = ax.plot_surface(X, Y, Z, cmap='viridis')
# 添加颜色条
fig.colorbar(surf)
# 设置坐标轴标签
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
# 处理滚轮事件的函数
def on_scroll(event):
if event.button == 'up':
factor = 1.25
elif event.button == 'down':
factor = 0.8
else:
factor = 1
ax.set_xlim3d(ax.get_xlim3d()[0] * factor, ax.get_xlim3d()[1] * factor)
ax.set_ylim3d(ax.get_ylim3d()[0] * factor, ax.get_ylim3d()[1] * factor)
ax.set_zlim3d(ax.get_zlim3d()[0] * factor, ax.get_zlim3d()[1] * factor)
plt.draw()
# 连接滚轮事件
fig.canvas.mpl_connect('scroll_event', on_scroll)
# 显示图形
plt.show()
二 分析
以上代码中,核心是以下两行:
# 连接滚轮事件
fig.canvas.mpl_connect('scroll_event', on_scroll)
# 处理滚轮事件的函数
def on_scroll(event):
if event.button == 'up':
factor = 1.25
elif event.button == 'down':
factor = 0.8
else:
factor = 1
ax.set_xlim3d(ax.get_xlim3d()[0] * factor, ax.get_xlim3d()[1] * factor)
ax.set_ylim3d(ax.get_ylim3d()[0] * factor, ax.get_ylim3d()[1] * factor)
ax.set_zlim3d(ax.get_zlim3d()[0] * factor, ax.get_zlim3d()[1] * factor)
plt.draw()
这两部分代码分别用于捕捉鼠标滚轮事件,以及对事件的处理。当检测到滚轮向上滚动时,将图形放大25%;向下滚动时,缩小20%。通过这种方式,可以实现对3D图形的动态缩放,使交互体验更加友好。
热门推荐
基坑开挖周边房屋施工前鉴定
明末百姓有多惨?大明是亡得太迟了
补中益气汤治疗结直肠癌新突破:揭示PI3K/Akt/mTOR信号通路作用机制
心脏反流的中医调理方案
博美选食:冻干或狗粮,营养均衡是关键
为爱犬打造专属营养餐:自制狗饭全攻略
梁山地煞中这4人该排入天罡,能力不输武松,都凭本事活到了最后
没有一只鸭子可以走出城外!红皮烤鸭,安徽芜湖美食之瑰宝
孩子看电视:利弊权衡与正确观看指南,让孩子健康成长!
生命的延续:为什么要生孩子
秋季探秘四川金口河:九月最美峡谷之旅攻略
心脏血管支架手术费用及术后护理全攻略
如何在银行办理定期存款的部分提前支取?
甲状腺癌术后易出现4大并发症,提醒患者,发现问题需及时就医!
公安局DNA数据库如何对比人员寻亲
外用药的使用原则和使用方法 如何正确使用皮肤病外用药
大便稀粘马桶的原因及应对方法
只有低压升高,但没有超过100,需要吃降压药吗?
深度解析:影响液体压力大小的因素及计算方法
怎样教育孩子孝敬爷爷奶奶,如何培养孩子对祖辈的孝心
企业健康饮食教育:从规划到实施的全方位指南
AI智能语音质检:应用场景与优势
咬定青山不放松,立根原在破岩中! 解析坚韧不拔的象征《竹石》
教师考核制度怎么设计才能提高教学质量?
《荷马史诗》:古希腊的英雄传奇与文化传承
加盟商解除合同能追回加盟费吗?详解商业特许经营中的法律问题
如何将数据结构和算法应用到实际开发中
Excel统计功能使用指南:从入门到精通
printf命令:格式化输出
10种实用的除胶方法,轻松去除胶带残留!