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执行子进程实现进程间通信的方法
Jun 02 Python
python生成器与迭代器详解
Jan 01 Python
pycharm配置pyqt5-tools开发环境的方法步骤
Feb 11 Python
Python性能分析工具Profile使用实例
Nov 19 Python
python返回数组的索引实例
Nov 28 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
python脚本监控logstash进程并邮件告警实例
Apr 28 Python
在Keras中利用np.random.shuffle()打乱数据集实例
Jun 15 Python
keras中的History对象用法
Jun 19 Python
彻底搞懂python 迭代器和生成器
Sep 07 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 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
腾讯QQ微博API接口获取微博内容
2013/10/30 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
Git命令之分支详解
2021/03/02 PHP
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
python使用百度文字识别功能方法详解
2019/07/23 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
旅游管理毕业生自荐信范文
2014/03/19 职场文书
相亲大会策划方案
2014/06/05 职场文书
人力资源职位说明书
2014/07/29 职场文书
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android