许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Matlab的制作过程概述:图开发概述

Matlab的制作过程概述:图开发概述

阅读数 4
点赞 0
article_banner

图开发概述

使用绘图函数(如 plot、scatter 和 bar),您可以通过颜色和线型等方面的基本控制来快速可视化数据。要创建自定义图,您可以组合多个图形对象,设置这些对象的属性,或调用其他函数。在 R2019a 及更早版本中,存储自定义代码并与他人共享的一种常见方法是编写脚本或函数。

从 R2019b 开始,您可以通过定义 ChartContainer 基类的子类来为图创建类实现。创建类使您能够:

为用户提供方便的接口 - 当用户要自定义图的某个方面时,他们可以设置属性,而不必修改和重新运行图形代码。用户可以在命令行修改属性或在属性检查器中检查它们。

封装算法和基本图形对象 - 实现用于执行计算和管理基础图形对象的方法。以这种方式组织您的代码,您可以对用户隐藏实现细节。

定义派生自该基类的图时,图的实例是图形对象层次结构的成员。因此,您的图与图形系统的许多方面兼容。例如,gca 和 findobj 函数可以返回图的实例。图类的结构

图类的第一行将 matlab.graphics.chartcontainer.ChartContainer 类指定为超类。例如,名为 ConfidenceChart 的类的第一行如下所示:

classdef ConfidenceChart < matlab.graphics.chartcontainer.ChartContainer

除了指定超类以外,还需要/建议在类定义中包括以下组件。

组件说明此代码块定义您允许用户访问的所有属性。这些属性一起构成图的用户界面。

此代码块存储您不希望用户访问的基础图形对象和其他实现细节。

在此代码块中,设置以下属性值:

Access = private

Transient

NonCopyable

此方法设置图的初始状态。它会在 MATLAB® 构造对象时执行一次。

在受保护的代码块中定义此方法,以便只有您的类才能执行它。

此方法更新图中的底层对象。它在以下条件下执行:

在用户更改一个或多个属性值后的下一次 drawnow 执行期间

当用户图形环境的某个方面发生变化时(例如图窗大小)

在与 setup 方法相同的受保护模块中定义此方法。隐式构造函数方法

您不必为您的类编写构造函数方法,因为构造函数是从 ChartContainer 基类继承的。构造函数接受可选的输入参数:父容器和任意数量的用于设置图属性的名称-值对组参数。例如,如果您定义名为 ConfidenceChart 的类,该类具有公共属性 XData 和 YData,您可以使用以下命令之一创建该类的实例:

c = ConfidenceChart(gcf,'XData',[1 2 3],'YData',[4 5 6])

c = ConfidenceChart('XData',[1 2 3],'YData',[4 5 6])

如果您要提供接口,以与典型函数相同的方式接受输入参数,您可以定义自定义构造函数方法。有关详细信息,请参阅为图类编写构造函数。公共和私有属性块

在至少两个属性块之间划分您的类属性:

用于存储面向用户界面的组件的公共属性块

用于存储要隐藏的实现细节的私有属性块

公共属性块中的属性存储用户提供的输入值。例如,显示线条的图可能会将 x 和 y 坐标向量存储在两个公共属性中。由于属性名称-值对组参数是隐式构造函数方法的可选输入,因此推荐的方法是将公共属性初始化为默认值。如果您定义了存储坐标值的公共属性,如果用户在没有任何输入的情况下调用构造函数,则将这些公共属性初始化为 NaN 值或空数组会构造一个空图。

私有属性块中的属性存储构成图的基础图形对象,以及要存储的任何计算值。最终,您的类将使用公共属性中的数据来配置底层对象。通过为私有属性块设置 Transient 和 NonCopyable 特性,可以避免在用户复制或保存图实例时存储冗余信息。

例如,以下是显示 Line 对象和 Patch 对象的图的属性块。公共属性块存储用户可以控制的值:线的 x 和 y 坐标、置信边界值、标记符号和颜色值。私有属性块存储 Line 和 Patch 对象。

properties

XData = NaN

YData = NaN

ConfidenceMargin = 0.15

MarkerSymbol = 'o'

Color = [1 0 0]

end

properties(Access = private,Transient,NonCopyable)

LineObject

PatchObject

endsetup 方法

当 MATLAB 构造图对象时,setup 方法会执行一次。执行此方法后,将赋予作为名称-值对组参数传递给构造函数方法的任何属性值。

使用 setup 方法:

调用绘图函数来创建要在图中使用的基本图形对象。

将绘图函数返回的基本对象作为私有属性存储在图对象上。

配置基本图形对象。

配置坐标区。

许多图形函数都有可选的输入参数来指定目标坐标区对象。这些函数包括绘图函数(例如 plot、scatter 和 bar)和用于修改坐标区的函数(例如 hold、grid 和 title)。从类方法中调用这些类型的函数时,必须指定目标坐标区对象。您可以通过调用 getAxes 方法来访问坐标区对象。此方法将返回坐标区对象;如果图尚未包含坐标区对象,则将创建一个笛卡尔坐标区对象。

小心

在未指定目标坐标区的情况下,调用绘图函数或用于修改坐标区的函数可能会产生意外的结果。

在 setup 方法中调用绘图函数时,请为坐标数据指定临时值(例如 NaN)。另外,还需要为与类的公共属性相对应的其他参数指定临时值。这样做可以避免在 setup 和 update 方法中设置相同的属性值。

如果要在坐标区上显示多个基本对象,请在绘图命令之间调用 hold 函数。在完成最后一个绘图命令后,将 hold 状态设置回 'off'。

例如,假定有一个图,图中显示了一条线和一个补片。它具有以下属性:

两个公共属性,分别名为 XData 和 YData,用于存储线的 x 和 y 坐标

两个私有属性,分别名为 LineObject 和 PatchObject

setup 方法通过调用 getAxes 方法获取坐标区对象。然后,它会调用 patch 函数,并将输出存储在 PatchObject 属性中。在调用 plot 函数创建 LineObject 属性之前,下一行代码将坐标区的保留状态设置为 'on'。最后一行代码将坐标区 hold 状态设置回 'off'。

function setup(obj)

% Get the axes

ax = getAxes(obj);

% Create Patch and Line objects

obj.PatchObject = patch(ax,NaN,NaN,'r','FaceAlpha',0.2,...

'EdgeColor','none');

hold(ax,'on')

obj.LineObject = plot(ax,NaN,NaN);

% Turn hold state off

hold(ax,'off')

endupdate 方法

当用户更改图对象的一个或多个属性值时,MATLAB 会标记该图对象以进行更新。在 setup 方法运行后,将首次运行update 方法。然后,它将在下次执行 drawnow 时运行。根据用户 MATLAB 会话中的图形环境状态,drawnow 函数会周期性自动执行。因此,在更改属性值和查看这些更改的结果之间可能会存在延迟。

使用 update 方法,根据公共属性的新值重新配置图中的基础图形对象。通常,此方法不会区分哪些公共属性发生了更改。它会重新配置依赖于公共属性的基础图形对象的所有方面。

例如,假设有具有以下属性的图:

两个公共属性,分别名为 XData 和 Color

两个名为 LineObject 和 PatchObject 的私有属性

update 方法会更新 Line 和 Patch 对象的 XData 和 Color 属性。

function update(obj)

% Update XData of line object

obj.LineObject.XData = obj.XData;

% Update patch XData

x = obj.XData;

obj.PatchObject.XData = [x x(end:-1:1)];

% Update line object colors

obj.LineObject.Color = obj.Color;

obj.PatchObject.FaceColor = obj.Color;

end示例:置信边界图

此示例说明如何创建一个图来绘制带有置信边界的线条。在位于 MATLAB 路径上的文件夹中创建名为 ConfidenceChart.m 的类定义文件。按照以下步骤定义类。

步骤实现从 ChartContainer 基类派生。classdef ConfidenceChart < matlab.graphics.chartcontainer.ChartContainer

定义公共属性。properties

XData = NaN

YData = NaN

ConfidenceMargin = 0.15

MarkerSymbol = 'o'

Color = [1 0 0]

end

定义私有属性。properties(Access = private,Transient,NonCopyable)

LineObject

PatchObject

end

实现 setup 方法。在本例中,调用 plot 和 patch 函数以分别创建 Patch 和 Line 对象。将这些对象存储在对应的私有属性中。

退出方法之前,将坐标区的 hold 状态设回 'off'。methods(Access = protected)

function setup(obj)

% get the axes

ax = getAxes(obj);

% Create Patch and Line objects

obj.PatchObject = patch(ax,NaN,NaN,'r','FaceAlpha',0.2,...

'EdgeColor','none');

hold(ax,'on')

obj.LineObject = plot(ax,NaN,NaN);

% Turn hold state off

hold(ax,'off')

end

实现 update 方法。在本例中,更新底层对象的 x 和 y 坐标、颜色和标记符号。function update(obj)

% Update XData and YData of Line

obj.LineObject.XData = obj.XData;

obj.LineObject.YData = obj.YData;

% Update patch XData and YData

x = obj.XData;

obj.PatchObject.XData = [x x(end:-1:1)];

y = obj.YData;

c = obj.ConfidenceMargin;

obj.PatchObject.YData = [y+c y(end:-1:1)-c];

% Update colors

obj.LineObject.Color = obj.Color;

obj.PatchObject.FaceColor = obj.Color;

% Update markers

obj.LineObject.Marker = obj.MarkerSymbol;

end

end

end

接下来,通过调用具有一些公共属性的隐式构造函数方法来创建图的实例:

x = 0:0.2:10;

y = besselj(0,x);

c = ConfidenceChart('XData',x,'YData',y,'ConfidenceMargin',0.15);

148a6435c4e2778ff57d7c28834cd96a.png

更改颜色。

c.Color = [0 0 1];

30537f7a0c64236a5834757db531cf9d.png支持常用图形功能

默认情况下,图实例支持所有 MATLAB 图通用的许多功能。例如,gca 和 findobj 函数可以返回图的实例。您还可以将图的实例传递给 set 和 get 函数,并且可以在属性检查器中配置图的属性。

只有当您对图启用了下表中所述的功能时,这些功能才可用。

功能说明更多信息不同类型的坐标区或多个坐标区显示一个或多个笛卡尔图、极坐标图或地理图。

函数启用在坐标区上设置属性的函数,如 title、xlim、ylim 函数。

保存和加载在用户完成与图的交互后存储更改,以便在将图加载回 MATLAB 时保存图并还原其状态。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空