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程序设计入门(2)变量类型简介
Jun 16 Python
python+Django+apache的配置方法详解
Jun 01 Python
Python元组及文件核心对象类型详解
Feb 11 Python
利用python将json数据转换为csv格式的方法
Mar 22 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
Php多进程实现代码
May 07 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
Python实现aes加密解密多种方法解析
May 15 Python
python源码剖析之PyObject详解
May 18 Python
Python-OpenCV教程之图像的位运算详解
Jun 21 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 self,$this,const,static,-&amp;gt;的使用
2009/10/22 PHP
PHP插入排序实现代码
2013/04/04 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
vue mounted组件的使用
2018/06/18 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
python实现查询苹果手机维修进度
2015/03/16 Python
python中threading超线程用法实例分析
2015/05/16 Python
Python编码爬坑指南(必看)
2016/06/10 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
2018/12/18 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
python3安装crypto出错及解决方法
2019/07/30 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
Python reversed函数及使用方法解析
2020/03/17 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
解释i节点在文件系统中的作用
2013/11/26 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
管理提升方案
2014/06/04 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
中考学习决心书
2015/02/04 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python
TypeScript 内置高级类型编程示例
2022/09/23 Javascript