MATLAB系列09:图形句柄

MATLAB系列09:图形句柄

  • 9. 图形句柄
    • 9.1 MATLAB图形系统
    • 9.2 对象句柄
    • 9.3 对象属性的检测和更改
      • 9.3.1 在创建对象时改变对象的属性
      • 9.3.2 对象创建后改变对象的属性
    • 9.4 用 set 函数列出可能属性值
    • 9.5 自定义数据
    • 9.6 对象查找
    • 9.7 用鼠标选择对象
    • 9.8 位置和单位
      • 9.8.1 图像(figure)对象的位置
      • 9.8.2 坐标系对象和 uicontrol 对象的位置
      • 9.8.3 文本(text)对象的位置
    • 9.9 打印位置
    • 9.10 默认和 factory 属性

9. 图形句柄

9.1 MATLAB图形系统

MATLAB 图形系统是建立在图形对象的等级系统之上, 每一个图形对象都有一个独立的名字, 这个名字叫做句柄。 每一个图形对象都有它的属性, 我们可以通过修改它的属性来修改物体的行为。 例如, 一条曲线是图形对象的一种。 曲线对象有以下的属性: x 数据, y 数据, 颜色, 线的类型, 线宽, 符号类型等等。 修改其中的一个属性就会改变图象窗口中的一个图像。

图形对象的层次结构如下:

image-20240916145838176

在 MATLAB 中最高层次的图形对象被称为根对象, 我们可以通过它对整个计算机屏幕进行控制。 当 MATLAB 启动时, 根对象会被自动创建, 它一直存在直到 MATLAB 被关闭。与根对象相关的属性是应用于所用 MATLAB 窗口的默认属性。

在根对象下, 有多个图像窗口, 或只有图像。 每一个图像在用于显示图像数据的计算机屏幕上都有一个独立的窗口, 每一个图像都有它独立的属性。 与图像相关的属性有, 颜色,图片底色, 纸张大小, 纸张排列方向, 指针类型等。

9.2 对象句柄

句柄是在 MATLAB 中的一个独一无二的整数或实数, 用于指定对象的身份。 用于创建一个图象对象的任意命令都会自动地返回一个句柄。示例:

>> Handl=figureHandl = Figure (1) - 属性:Number: 1Name: ''Color: [0.9400 0.9400 0.9400]Position: [573 444 560 420]Units: 'pixels'显示 所有属性

图像(图)对象的句柄一般是一个小的正整数, 例如 1, 2, 3……而其他的图形(graphic)对象为任意的浮点数。我们可以利用 MATLAB 函数得到图像, 坐标系和其他对象的句柄。 例如, 函数 gcf 返回当前图像窗口的句柄, 而函数 gca 则返回在当前图像窗口中的当前坐标系对象的句柄, 函数gco 返回当前选择对象的句柄。 为了方便, 存储句柄的变量名要在小写字母后面个H。 这样就可以与普通变量(所有的小写变量, 大写变量, 全局变量)区分开来。

9.3 对象属性的检测和更改

9.3.1 在创建对象时改变对象的属性

当一个对象被创建时, 所有的属性都会自动初始化为默认值。 包含有"propertyname(属性名)"的创建函数创建对象时, 默认值会被跳过, 而跳过的值在创建函数中有。

plot(x, y, 'LineWidth', 2);

9.3.2 对象创建后改变对象的属性

我们可以用随时用 get 函数检测任意一个对象的属性, 并用 set 函数对它进行修改。

示例:

>> x = 0:0.1:2;
y = x .^2;
Hnd1 = plot(x, y);
>> result=get(Hnd1)result = 包含以下字段的 struct:XData: [0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1] (1×21 double)XDataMode: 'manual'XVariable: ''YData: [0 0.0100 0.0400 0.0900 0.1600 0.2500 0.3600 0.4900 0.6400 0.8100 1] (1×21 double)YDataMode: 'manual'YVariable: ''ZData: [1×0 double]ZDataMode: 'auto'ZVariable: ''XDataSource: ''YDataSource: ''ZDataSource: ''Color: [0 0.4470 0.7410]ColorMode: 'auto'LineStyle: '-'LineStyleMode: 'auto'LineWidth: 0.5000Marker: 'none'MarkerMode: 'auto'MarkerSize: 6MarkerEdgeColor: 'auto'MarkerFaceColor: 'none'Clipping: onMarkerIndices: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21]AlignVertexCenters: offLineJoin: 'round'Children: [0×0 GraphicsPlaceholder]Parent: [1×1 Axes]Visible: onHandleVisibility: 'on'ButtonDownFcn: ''ContextMenu: [0×0 GraphicsPlaceholder]BusyAction: 'queue'BeingDeleted: offInterruptible: onCreateFcn: ''DeleteFcn: ''Type: 'line'Tag: ''UserData: []Selected: offSelectionHighlight: onHitTest: onPickableParts: 'visible'DisplayName: ''Annotation: [1×1 matlab.graphics.eventdata.Annotation]SeriesIndex: 1DataTipTemplate: [1×1 matlab.graphics.datatip.DataTipTemplate]SourceTable: [0×0 table]AffectAutoLimits: on

得到的图像:

image-20240916151426210

更改线宽:

>> set(Hnd1,'LineWidth',4,'LineStyle','--')
image-20240916151514916

我们还可以使用属性编辑器来改变图像属性,启动命令为:

propedit(HandleList);
propedit;

这个函数第一个形式用于编辑所列出的句柄的属性, 而这个函数的第二种形式用于编辑当前图象的属性。

9.4 用 set 函数列出可能属性值

函数用于提供所有可能的属性值列表。 如果在调用函数 set 时, 只包括属性名而不包括相应的属性值, 那么函数 set 就会返回所有的合法属性值。

>> set(Hnd1,'LineStyle')5×1 cell 数组{'-'   }{'--'  }{':'   }{'-.'  }{'none'}

函数 set(Hnd1)返回一个对象的所有属性的所有可能的属性值。

>> set(Hnd1)AffectAutoLimits: {[on]  [off]}AlignVertexCenters: {[on]  [off]}BusyAction: {'queue'  'cancel'}ButtonDownFcn: {}Children: {}Clipping: {[on]  [off]}Color: {1×0 cell}ColorMode: {'auto'  'manual'}ContextMenu: {}CreateFcn: {}DeleteFcn: {}DisplayName: {}HandleVisibility: {'on'  'callback'  'off'}HitTest: {[on]  [off]}Interruptible: {[on]  [off]}LineJoin: {'chamfer'  'miter'  'round'}LineStyle: {'-'  '--'  ':'  '-.'  'none'}LineStyleMode: {'auto'  'manual'}LineWidth: {}Marker: {1×16 cell}MarkerEdgeColor: {'auto'  'none'}MarkerFaceColor: {'auto'  'none'}MarkerIndices: {}MarkerMode: {'auto'  'manual'}MarkerSize: {}Parent: {}PickableParts: {'visible'  'none'  'all'}Selected: {[on]  [off]}SelectionHighlight: {[on]  [off]}SeriesIndex: {'none'}SourceTable: {}Tag: {}UserData: {}Visible: {[on]  [off]}XData: {}XDataMode: {'auto'  'manual'}XDataSource: {}XVariable: {}YData: {}YDataMode: {'auto'  'manual'}YDataSource: {}YVariable: {}ZData: {}ZDataMode: {'auto'  'manual'}ZDataSource: {}ZVariable: {}

9.5 自定义数据

除了一个 GUI 对象定义的标准属性以外, 程序可以定义所要控制的数据的特殊属性。程序员可以用附加属性把任意类型的数据添加到 GUI 对象中。 任意数量的数据可以被存储,并应用于各种目的。自定义数据可以用近似标准属性的形式存储。 每一个数据条目都有一个名字和值。 数据变量可以用函数 setappdate 存储在一个对象, 并用函数 getappdata 接收。setappdate 函数的基本形式如下

setappdata(Hndl, 'DataName', DataValue);

与自定义数据相关的函数:

image-20240916154330981

9.6 对象查找

每一个新的图象在从创建开始时就有它们自已的句柄, 句柄可以由创建函数返回。假设我们由于一些原因, 丢失了对象的句柄。 我们如何检测和图形对象呢?MATLAB 提供了四个专门的函数, 用来帮助寻找对象的句柄。

  • gcf返回当前图象的句柄
  • gca返回当前图象中当前坐标系的句柄
  • gco返回当前对象的句柄
  • findobj寻找指定属性值的图形对象

函数 gcf 返回当前图象的句柄。 如果这个图象不存在, gcf 将会创建一个, 并返回它的句柄。 函数 gca 返回当前图象中当前坐标系的句柄, 如果图象不存在, 或当前图象中无坐标系, 那么函数 gca 将创建一个坐标系, 并返回它的句柄。

当前对象是指用鼠标单击的最后一个对象。 这个对象可以是除了根对象的任意图形对象。直到鼠标在图象内发生了单击事件, 在图象内才有一个当前对象。 在单击事件发生之后, 函数 gco 将返回一个空数组[], 不像函数 gcf 和 gca, gco 如果不存在就自动创建。

9.7 用鼠标选择对象

函数 gco 将返回当前对象, 当前对象是指用鼠标最后一次单击的对象。 每一个对象都有一个与之相关的可选择区, 在可选择区内任意一个单击都可以看作对这个对象的单击。 对于细小的对象(例如线, 点)来说, 这种特性是非常重要的。 可选择区的宽度和形状由对象的类型确定。

如果一个用户单击了两个或多个对象的所在点, 例如两线的交插点将会有什么事情发生。 这取决于每一个对象堆垛顺序(stacking order)。 堆垛顺序是 MATLAB 选择对象的顺序。 在一个图象中所有的"子对象"属性句柄顺序就是堆垛顺序。 如果单击了两个或多个对象的所在点, 在堆垛顺序的优先权高的将会被选择。

当选择图形对象时, 我们有时可以调用 MATLAB 内建函数 waitforbuttonpress。 这个函数的形式为

k = waitforbuttonpress

当这个函数运行时, 它将会暂停程序, 直到任意键按下或鼠标单击事件发生后, 程序才恢复运行。 如果按下了鼠标键函数将会返回 0, 按下任意键, 函数将会 1。函数经常用于暂停程序。 当鼠标单击事件发生后, 程序将会用 gco 函数恢复选择对象的句柄。

9.8 位置和单位

9.8.1 图像(figure)对象的位置

一个图象(图)的位置(“position”)用一个 4 元素行向量指定在计算机屏幕内的位置。 在这个向量中的值为[left bottom width height], 其中 left 是指图象的左边界, bottom 是指图象的底边界, width 是指图象的宽度, height 是指图象的高度。 它的这些位置值的单位可以用对象的"Units"属性指定。 例如, 与当前图象的位置和单位可以用下面的语句得到。

>> get(gcf,'Position')ans =573.0000  443.6667  560.0000  420.0000>> get(gcf,'Units')ans ='pixels'

单位(“units”)属性的默认值为像素(pixels), 但是它的属性值还可以为英尺(inches), 公分(centimeters), 点(points), 或归一化坐标(normalixed coordinates)。 像素代表了屏幕像素,即在屏幕上可表示出来的最小的对象。因为像素数因机算机屏幕的不同而不同, 所以指定对象的大小也会随之改变。归一化坐标是在 0 到 1 范围内。在归一化坐标中,屏幕的左下角为[0, 0]右上角为[1.0, 1.0]。

如果对象的位置归一化坐标系的形式描述, 那么不同分辨率的显示器上对象的相对位置是固定的。 例如, 下面的语句创建了一个图象, 把图象放置在屏幕的上部, 而不用考虑显示器的大小。

H = figure(1)
set(H,'units', 'normalized','position',[0 .5 .5 .45])

9.8.2 坐标系对象和 uicontrol 对象的位置

坐标系对象和 uicontrol 对象的位置同样可以用一个 4 元素向量表示, 但它是相对于figure 对象的位置。 一般说来, 所有子对象的"position"属性都与它的父对象相关。默认地, 坐标系对象在一图象内的位置是有归一化单位指定的, (0, 0)代表图象的左下角, (1, 1)代表图象的右上角。

9.8.3 文本(text)对象的位置

与其他对象不同, 文本(text)对象有一个位置属性, 包含两个或三个元素。 这些元素为坐标系对象中文本对象的 x, y 和 z 轴。 注意都显示在坐标轴上。放置在某一特定点的文本对象的位置可由这个对象的 HorizontalAlignment 和VerticalAlignment 属性控制HorizontalAlignment 的属性可以是{Left}。 Center, 或 Right。VerticalAlignment 的属性值可以为 Top, cap, {Middle}, Baseline 或 Bottom。文本对象的大小由字体大小和字符数决定, 所以没有高度和宽度值与之相连。

9.9 打印位置

属性"Position"和"Units"用来指定图象在计算机屏幕上的位置。 还有其他的五个属性用于指定图象在打印纸上的位置。

image-20240917093940564

9.10 默认和 factory 属性

MATLAB 允许你修改默认值本身,所以当他们被创建时, 所有的对象都会继承所有正确的属性值。默认值的设置要用一个字符串, 这个字符串由"Default", 对象类型和属性名组成。 所以默认图象颜色可以通过属性"DefaultFigureColor"来设置, 默认的坐标轴颜色可以通过属性"DefaultAxesColor"设置。 下面是设置默认值的一些例子:

image-20240917094540527

如果你想要定制 MATLAB, 每一次都有不同的默认值, 那么每次当 MATLAB 启动时你必须对根对象设置默认值。 最简单的方法是把默认值存入 startup.m 文件, 每次 MATLAB 启动时都会自动执行。 例如, 假设你经常使用 A4 纸, 并在图象中经常加入网格线。 那么你可以把下面的语句加入到 startup.m 文件中。

set(0, 'DefaultFigurePaperType', 'a4letter');
set(0, 'DefaultAxesXGrid', 'on');
set(0, 'DefaultAxesYGrid', 'on');
set(0, 'DefaultAxesZGrid', 'on');

有三种特殊值字符串用于句柄图形:“remove”, “factory"和"default”。 如果你已经为一个属性设置了默认值, 那么"remove"值将会删除你所设置的默认值。 例如, 假设你设置默认的图象颜色为黄色。

set(0, 'DefaultFigureColor', 'y');

调用下面的函数将会取消当前的默认值并恢复先前的默认值。

set(0, 'DefaultFigureColor', 'remove');

字符串"factory"允许临时跳过当前的默认值, 并使用原来的 MATLAB 的默认值。

figure('Color', 'factory');

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

使用微信小程序唤起导航的常用方式

1.微信内置地图 可以使用小程序的wx.openLocation方法,该方法可以打开微信内置地图,并显示指定的位置坐标。如果用户手机上安装了其他地图应用,可能会出现选择使用哪个地图应用进行导航的提示。 wx.openLocation({latitude: 目标地点纬度,lo…

滑动窗口(7)_串联所有单词的字串

目录 1. 题目链接: 2. 题目描述 : 3. 解法 : 题目解析: 算法思路 : 图解流程: 代码展示 : 结果分析 : 1. 题目链接: OJ链接:串联所有单词的字串 2. 题目描述 : 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 w…

Llama 3.1 Omni:颠覆性的文本与语音双输出模型

你可能听说过不少关于语言模型的进展,但如果告诉你,有一种模型不仅能生成文本,还能同时生成语音,你会不会觉得特别酷?今天咱们就来聊聊一个相当前沿的项目——Llama 3.1 Omni模型。这个模型打破了传统的文字生成边界,直接让文本和语音同时输出,实现了真正的"多模态…

【uni-app】小兔鲜项目-基础架构-请求和上传文件拦截器

注意事项 uni.request 请求封装 请求和上传文件拦截器 uniapp 拦截器: uni.addInterceptor 接口说明:接口文档 实现需求 拼接基础地址设置超时时间添加请求头标识添加 token 参考代码 // src/utils/http.ts// 请求基地址 const baseURL https://pca…

fastadmin 部署后前台会员中心出现404错误

访问前台会员中心出现404错误。 解决:nginx访问站点增加伪静态 location / {if (!-e $request_filename){rewrite ^(.*)$ /index.php?s$1 last; break;} }在phpstydy中增加伪静态,如图:

Renesas R7FA8D1BH (Cortex®-M85)的UART使用介绍

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP配置UART 2.1 配置参数 2.2 UART模块介绍 3 接口函数介绍 3.1 R_SCI_B_UART_Open() 3.2 R_SCI_B_UART_Close() 3.3 R_SCI_B_UART_Read() 3.4 R_SCI_B_UART_Write() 3.5 R_SCI_B_UAR…

Tiny-universe-taks1-LLama3模型原理

LLama3模型原理-学习打卡 大模型相关知识笔记transformersSelf-Attention(自注意力机制)Multi-Head-Attention(多头注意力机制) LLama梳理 大模型相关知识笔记 transformers 目前市面上主流的大模型算法都给予Transformers架构,如下图所示&…

Spring WebFlux实践与源码解析

Spring WebFlux和Spring MVC区别 如下来自官网Spring MVC和Spring WebFlux技术栈的区别。 可以看到Spring MVC主要是基于Servlet API使用同步阻塞IO架构,每来一个请求都需要启动一个线程进行处理。这种架构对于大量I/O密集型的请求,需要同时启动大量的线…

CTFshow——萌新密码1-4

萌新密码1 53316C6B5A6A42684D3256695A44566A4E47526A4D5459774C5556375A6D49324D32566C4D4449354F4749345A6A526B4F48303D 首先,16进制转字符串 在线字符串/十六进制互相转换—LZL在线工具 (lzltool.cn) S1lkZjBhM2ViZDVjNGRjMTYwLUV7ZmI2M2VlMDI5OGI4ZjRkOH0 发现…

ConflictingBeanDefinitionException | 运行SpringBoot项目时报错bean定义冲突解决方案

具体报错: Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘CommissionMapperImpl’ for bean class [com.xxx.mapper.carrier.CommissionMapperImpl] conflicts with existing, non-co…

OpenAI GPT o1技术报告阅读(2)- 关于模型安全性的测试案例

✨报告阅读:使用大模型来学习推理(Reason) 首先是原文链接:https://openai.com/index/learning-to-reason-with-llms/ 接下来我们看一个简单的关于模型安全性的测试,当模型被问到一个有风险的话题时,会如何思考并回答用户呢&…

JAVA基础,利用for循环找水仙花个数

public class learn2 {public static void main(String[] args) {int count 0;//定义水仙花的个数for (int i 100; i<999; i){int g i%10;int s i/10%10;int b i/100%10;if (i b*b*b s*s*s g*g*g){count1;System.out.println(i);}}System.out.println("一共有"…

MySQL 中的索引覆盖扫描:加速查询的秘密武器

在 MySQL 数据库的使用中&#xff0c;索引是提高查询性能的重要工具。而索引覆盖扫描&#xff08;Index Covering Scan&#xff09;更是一种能显著提升查询效率的技术。本篇文章我们就来深入了解一下 MySQL 中的索引覆盖扫描是什么。 一、什么是索引覆盖扫描 在 MySQL 中&…

攻防世界——simple_php(NO.GFSJ0485)

目录 基础环境解题过程 基础环境 靶机&#xff1a;xctf 方向&#xff1a;Web 难度&#xff1a;1 解题过程 打开题目 我们可以看到该题目的源码&#xff0c;大概分析一下&#xff1a; 我们需要用GET方式传两个值&#xff0c;分别为a,b。 接下来是第一个if&#xff0c;这里判…

分享几种方式获取免费精致的Live2d模型

文章目录 1、 Live2D官方示例数据集&#xff08;可免费下载&#xff09;2、模之屋3、unity商店4、直接b站搜索5、youtube6、BOOTH完结 1、 Live2D官方示例数据集&#xff08;可免费下载&#xff09; 官方提供了一些 Live2D实例模型给大家下载使用 地址&#xff1a;https://ww…

栈、队列、链表

基于《啊哈&#xff01;算法》和《数据结构》&#xff08;人民邮电出版社&#xff09; 本博客篇幅较多&#xff0c;读者根据目录选择&#xff0c;不理解的可留言和私信。 栈、队列、链表都是线性结构。 三者都不是结构体、数组这种数据类型&#xff0c;我认为更像是一种算法…

基于单片机的远程无线控制系统设计

摘 要 &#xff1a; 主要介绍了一种以单片机 AT89C2051 、 无线模块 APC200A-43 和继电器为核心的远程智能控制系统。 该系统通过对单片机功能的研究 &#xff0c; 使用单片机的输入输出口和中断实现对控制信号的处理&#xff0c; 通过调试无线通讯模块 &#xff0c; 控制…

Mybatis 快速入门(maven)

文章目录 需求建表新建了数据库但是navicat界面没有显示 新建maven项目 注意导入依赖 总结 黑马学习笔记 需求 建表 注意&#xff1a;设置字符集 减少出错 drop database mybatis; create database mybatis charset utf8; use mybatis;drop table if exists tb_user;create…

汇总区间计算

给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按…

深入理解Unreal中的AI感知系统

StimuliSource和PerceptionListener 感知作为一种信号&#xff0c;整个场景中存在这个信号的生产者和消费者。这种信号在Unreal中被叫做刺激Stimuli 生产者就是StimuliSource&#xff0c;通过挂载StimuliSourceComponent并RegisterForSense来注册成为哪些类型刺激的刺激源 消费…