Python数据可视化(六)

实现事件处理效果

我们借助 matplotlib 可以实现事件处理效果,例如,单击关闭画布会出现画布被关闭的文本提 示,在画布上的图形界面任意位置单击可以获得放大后的此处图形界面等。下面,我们就挑选一些 典型的事件处理案例来讲解实现事件处理效果的方法。

一,单击关闭画布后出现事件结果提示  

当关闭画布后,通过引入事件处理机制,就可以看到事件处理结果的文本内容。也就是说,我 们对画布所做的动作是可以被捕捉到的,进而以文本形式展示捕捉到的事件信息。

1.代码示例

from __future__ import print_function
import matplotlib.pyplot as plt


def handle_event(close):
    print("Handling Event: Closed Figure!")

font_style = dict(family="serif", weight="black", size=50)

fig = plt.figure()
fig.canvas.mpl_connect("close_event", handle_event)

plt.text(0.15, 0.5, "close_event", **font_style)

plt.show()

2.代码解释

这一事件处理机制的关键代码是“fig.canvas.mpl_connect("close_event", handle_event)”,也就是将关闭画布事件和事件处理效果进行关联,从而使得关闭动作可以被有效地追踪和展示。事件处理 效果是在函数 handle_event()中进行设置的,也就是以文本形式展示事件处理效果。

和JS里面的事件绑定差不多。

二,画布局部放大效果的实现方法

如果我们想尝试观察图形展示界面上的局部视图效果,就可以借助事件处理机制以图形局部放 大效果的方式进行细节展示。这样,即使展示效果不好观察,也可以通过局部放大的办法进行展示 效果的深入考察和分析。接下来,我们就以散点图为例,讲解局部放大效果的设置方法。

1.代码示例

import matplotlib.pyplot as plt
import numpy as np

fig1, ax1 = plt.subplots(1, 1)
fig2, ax2 = plt.subplots(1, 1)

ax1.set_xlim(0, 1)
ax1.set_ylim(0, 1)
ax1.set_autoscale_on(False)
ax1.set_title("Click to zoom")

ax2.set_xlim(0.0, 0.4)
ax2.set_ylim(0.0, 0.4)
ax2.set_autoscale_on(False)
ax2.set_title("Zoom window")

x = np.random.rand(100)
y = np.random.rand(100)
s = np.random.rand(100) * 100
c = np.random.rand(100)

ax1.scatter(x, y, s, c)
ax2.scatter(x, y, s, c)


def clicktozoom(event):
    if event.button != 1:
        return
    x, y = event.xdata, event.ydata
    ax2.set_xlim(x - 0.15, x + 0.15)
    ax2.set_ylim(y - 0.15, y + 0.15)
    fig2.canvas.draw()


fig1.canvas.mpl_connect("button_press_event", clicktozoom)

plt.show()

我们可以通过点击左侧图像来放大点击处并把放大图像放在右侧图像中。 

2.代码解释 

<1>将鼠标指针移动到图 9-5 中圆圈所标识的位置,然后单击此处的数据点,就会在右侧放大 效果画布中展示以此数据点为中心的局部展示效果,相当于对此数据点进行放大展示。这样,我们 就得到了画布局部放大的可视化效果。

<2> 实现这一事 件处理效果 的关键代码 是“fig1.canvas.mpl_connect("button_press_event", clicktozoom)”,即将事件处理名称与事件处理效果进行有效关联,从而完成特定事件处理模式的执 行任务。

<3>在“代码实现”部分里,我们建立了两个画布,分别设定原始画布的版幅和放大画面的版 幅,即画布 1 和画布 2。

<4>调用实例方法 scatter()在两个画布上绘制原始数据的散点图。

<5>函数 clicktozoom()的作用就是设置事件处理效果。如果在原始画布上单击散点图中的某一 点或某一处,那么此处的数据点的横、纵坐标的数值就会被赋给变量 x 和 y,从而以 x 和 y 为圆心、 以 0.15 为半径重新设置画布 2 中的版幅,进而实现放大画面的事件处理效果。 

<6>将事件处理类型和事件处理效果有机地进行整合,完成单击散点图中的任意位置后放大展 示的可视化效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/658048.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于微信小程序实现的【二手物品交易平台】后端 JAVA Springboot (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称&#xff1a; 基于微信小程序的二手物品交易平台 项目技术栈 该项目采用了以下核心技术栈&#xff1a; 后端框架/库&#xff1a; Java, SSM框架数据库&#xff1a; MySQL前端技术&#xff1a; 微信小程序技术其他相关技术&#xff1a; HTML, MyEclipse开发…

C#--Mapster(高性能映射)用法

1.Nuget安装Mapster包引用 2.界面XAML部分 <Window x:Class"WpfApp35.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.m…

Ubuntu配置Git

安装git sudo apt install git 查看是否安装成功 git --version 配置git 用github上注册的用户名和邮箱地址&#xff0c;配置git git config --global user.name "username" git config --global user.email "usernameemail.com" 重启ubuntu查看…

Filebeat进阶指南:核心架构与功能组件的深度剖析

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《洞察之眼&#xff1a;ELK监控与可视化》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是ELK 2、FileBeat在ELK中的角色 二、Fil…

【已解决】使用StringUtils.hasLength参数输入空格仍然添加成功定价为负数仍然添加成功

Bug情景 今天在做功能测试时&#xff0c;发现使用使用StringUtils.hasLength&#xff08;&#xff09;方法以及定价为负数时&#xff0c;添加图书仍然成功 思考过程 0.1 当时在做参数检验时用了spring提供的StringUtils工具包&#xff0c;百度/大数据模型说&#xff1a; 0.2…

Java 中BigDecimal传到前端后精度丢失问题

1.用postman访问接口&#xff0c;返回的小数点精度正常 2.返回到页面里的&#xff0c;小数点丢失 3.解决办法&#xff0c;在字段上加注解 JsonFormat(shape JsonFormat.Shape.STRING) 或者 JsonSerialize(using ToStringSerializer.class) import com.fasterxml.jackson.a…

Vim安装与配置教程(解决软件包Vim没有安装可候选)

一、Vim检测是否安装 1-输入vi查看是否安装&#xff1b; 2-按Tab键&#xff0c;显示以下字符为未安装&#xff1b; 3-显示以下字符为已安装&#xff08;可以看到有Vim&#xff09; 二、Vim安装过程 1. 打开终端&#xff0c;输入 sudo apt install vim; 2. 输入Y/y&#xff…

sysbench安装(在线离线)

简介 sysbench是一个多线程基准测试工具&#xff0c;它支持硬件&#xff08;CPU、内存、I/O&#xff09;、数据库基准压测等2种测试手段&#xff0c;用于评估系统的基本性能。本篇文章主要介绍sysbench在线和离线2种安装方法&#xff0c;并将离线编译时发生的异常记录到FAQ&…

idm软件是做什么的 IDM是啥软件 idm软件怎么下载 idm软件怎么下载

一、IDM是啥软件 IDM 是由美国 Tonec 公司开发的 Windows 软件&#xff0c;该软件最初于 2005 年发布。IDM全称Internet Download Manager&#xff0c;是一款Windows平台老牌而功能强大的下载加速器&#xff0c;专注于互联网数据下载。这款软件是一款不错的轻量级下载工具&…

【windows】Total Uninstall:一款功能强大的完全卸载软件

软件介绍 Total Uninstall是一款专业的软件卸载工具&#xff0c;旨在帮助用户彻底地清除计算机上的应用程序&#xff0c;包括与应用程序相关的所有文件和注册表项。以下是Total Uninstall的一些主要功能和特点&#xff1a; 完全卸载&#xff1a;软件可以监视应用程序的安装过程…

如何使用git上传linux下的项目!---附带每一步截图

在实际项目中&#xff0c;我们需要把自己的模块递给GitHub&#xff0c;需要别人的模块的时候拉下来&#xff0c;那么我们怎么把自己的项目递给GitHub呢&#xff1f;下面做一个总结&#xff1a; 登录GitHub 创建一个仓库 填写相关信息 项目名称是必填的&#xff0c;项目描述可以…

FPGA时钟:驱动数字逻辑的核心

一、引言 在FPGA&#xff08;现场可编程门阵列&#xff09;设计中&#xff0c;时钟信号是不可或缺的关键要素。时钟信号作为时序逻辑的心跳&#xff0c;推动着FPGA内部各个存储单元的数据流转。无论是实现复杂的逻辑运算还是处理高速数据流&#xff0c;都需要精确的时钟信号来保…

LeetCode115:不同的子序列

题目描述 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 代码 /*dp[i][j]&#xff1a;以i为结尾的s中有以j为尾的t的个数递推公式&#xff1a;当s[i - 1] 与 t[j - 1]相等时&#xff0c;dp[i][j]可以有两…

利用 Scapy 库编写源路由攻击脚本

一、介绍 源路由攻击是一种网络攻击方法&#xff0c;攻击者通过利用IP数据包中的源路由选项来控制数据包的传输路径&#xff0c;从而绕过安全设备或防火墙&#xff0c;直接访问目标系统。源路由功能允许数据包的发送方指定数据包通过的路径&#xff0c;而不是由路由器根据路由…

基于物联网技术的智能家居实训教学解决方案

引言 随着信息技术的飞速发展&#xff0c;&#xff0c;物联网&#xff08;IoT&#xff09;已深入至我们生活的每一个角落&#xff0c;从智能家居、智能健康、智能交通到智慧城市&#xff0c;无所不在。物联网技术已成为推动社会进步和产业升级的重要力量。智能家居作为物联网技…

【数据结构】二叉树-堆(上)

个人主页~ 二叉树-堆 一、树的概念及结构1、概念2、相关概念3、树的表示4、树的实际应用 二、二叉树的概念和结构1、概念2、特殊二叉树3、二叉树的性质4、二叉树的存储结构&#xff08;1&#xff09;顺序存储&#xff08;2&#xff09;链式存储 三、二叉树的顺序结构以及实现1、…

QT加载CAD文件(二)LibreCAD源码编译

一、LibreCAD LibreCAD是一个开源软件&#xff0c;不用破解激活&#xff0c;可以打开编辑DXF格式的文档&#xff0c;软件大小只有二十多M&#xff0c;对于一些比较简单的图纸还是可以胜任的。本文主要讲该软件源码编译。如果了解软件的基本使用可以参考https://blog.csdn.net/…

申请的商标名称相同或近似,如何解决!

最近遇到一些首次申请注册商标的主体&#xff0c;基本想的名称都是两个字或或者两个字加通用词&#xff0c;还有用的行业描述词或缺乏显著特征词&#xff0c;这样去申请注册商标&#xff0c;普推知产老杨分析这样去直接申请注册大概率驳回。 两个字基本上注册的差不多了&#…

介绍Django Ninja框架

文章目录 安装快速开始特性详解自动文档生成定义请求和响应模型异步支持中间件支持测试客户端 结论 Django Ninja是一个基于Python的快速API开发框架&#xff0c;它结合了Django和FastAPI的优点&#xff0c;提供了简单易用的方式来构建高性能的Web API。 安装 使用以下命令安…