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 多进程通信模块的简单实现
Feb 20 Python
深入分析在Python模块顶层运行的代码引起的一个Bug
Jul 04 Python
Python利用pyHook实现监听用户鼠标与键盘事件
Aug 21 Python
web.py 十分钟创建简易博客实现代码
Apr 22 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
python实现计数排序与桶排序实例代码
Mar 28 Python
Python多线程threading模块用法实例分析
May 22 Python
使用Python实现牛顿法求极值
Feb 10 Python
利用Python计算KS的实例详解
Mar 03 Python
python对execl 处理操作代码
Jun 22 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
Python编写单元测试代码实例
Sep 10 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在线生成ico文件的代码
2007/10/09 PHP
php实现水仙花数示例分享
2014/04/03 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
2014/12/24 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
简单学习vue指令directive
2016/11/03 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
Django组件cookie与session的具体使用
2019/06/05 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
银行实习人员自我鉴定
2013/09/22 职场文书
生物技术专业毕业生求职信范文
2013/12/14 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
先进班组事迹材料
2014/12/25 职场文书
研究生导师评语
2014/12/31 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书