python+matplotlib实现鼠标移动三角形高亮及索引显示


Posted in Python onJanuary 15, 2018

Trifinder事件实例

实例展示Trifinder对象对的使用。当鼠标移动到一个被分割的三角形上,这个三角形高亮显示,并且它的标签在图标题显示。

展示下演示结果:

python+matplotlib实现鼠标移动三角形高亮及索引显示

完整代码:

import matplotlib.pyplot as plt
from matplotlib.tri import Triangulation
from matplotlib.patches import Polygon
import numpy as np


def update_polygon(tri):
  if tri == -1:
    points = [0, 0, 0]
  else:
    points = triang.triangles[tri]
  xs = triang.x[points]
  ys = triang.y[points]
  polygon.set_xy(list(zip(xs, ys)))


def motion_notify(event):
  if event.inaxes is None:
    tri = -1
  else:
    tri = trifinder(event.xdata, event.ydata)
  update_polygon(tri)
  plt.title('In triangle %i' % tri)
  event.canvas.draw()


# Create a Triangulation.
n_angles = 16
n_radii = 5
min_radius = 0.25
radii = np.linspace(min_radius, 0.95, n_radii)
angles = np.linspace(0, 2 * np.pi, n_angles, endpoint=False)
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)
angles[:, 1::2] += np.pi / n_angles
x = (radii*np.cos(angles)).flatten()
y = (radii*np.sin(angles)).flatten()
triang = Triangulation(x, y)
triang.set_mask(np.hypot(x[triang.triangles].mean(axis=1),
             y[triang.triangles].mean(axis=1))
        < min_radius)

# Use the triangulation's default TriFinder object.
trifinder = triang.get_trifinder()

# Setup plot and callbacks.
plt.subplot(111, aspect='equal')
plt.triplot(triang, 'bo-')
polygon = Polygon([[0, 0], [0, 0]], facecolor='y') # dummy data for xs,ys
update_polygon(-1)
plt.gca().add_patch(polygon)
plt.gcf().canvas.mpl_connect('motion_notify_event', motion_notify)
plt.show()

总结

本文所示是一个Python+matplotlib实现的简单实例,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
最基础的Python的socket编程入门教程
Apr 23 Python
使用Python简单的实现树莓派的WEB控制
Feb 18 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
使用python实现ANN
Dec 20 Python
Django如何自定义model创建数据库索引的顺序
Jun 20 Python
解决python tkinter界面卡死的问题
Jul 17 Python
python的pstuil模块使用方法总结
Jul 26 Python
Python-opencv 双线性插值实例
Jan 17 Python
利用python实现逐步回归
Feb 24 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
浅析Python迭代器的高级用法
Jul 16 Python
PyQt 如何创建自定义QWidget
Mar 24 Python
wxPython之解决闪烁的问题
Jan 15 #Python
详细解读tornado协程(coroutine)原理
Jan 15 #Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 #Python
Tornado高并发处理方法实例代码
Jan 15 #Python
使用Python实现windows下的抓包与解析
Jan 15 #Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
Jan 15 #Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 #Python
You might like
PHP抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
php二维数组转成字符串示例
2014/02/17 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
numpy.array 操作使用简单总结
2019/11/08 Python
在python中做正态性检验示例
2019/12/09 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
个人安全生产承诺书
2014/05/22 职场文书
商业街策划方案
2014/05/31 职场文书
高中班级口号
2014/06/09 职场文书
社区两委对照检查材料
2014/08/23 职场文书
经济纠纷起诉状
2015/05/20 职场文书
2015年征兵工作总结
2015/07/23 职场文书
fastdfs+nginx集群搭建的实现
2021/03/31 Servers
Opencv实现二维直方图的计算及绘制
2021/07/21 Python
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS