Main Content

update

类: matlab.graphics.chartcontainer.ChartContainer
命名空间: matlab.graphics.chartcontainer

设置属性后更新图容器子类的实例

自 R2019b 起

语法

update(obj)

说明

update(obj) 在一个或多个属性值发生更改后更新图的内容。使用新属性值定义此方法以更新图中的底层图形对象。此方法在下一次 drawnow 执行期间用户更改图的一个或多个属性值之后执行。

输入参数

全部展开

matlab.graphics.chartcontainer.ChartContainer 基类继承的类的对象。

属性

Abstracttrue
Protectedtrue

要了解方法的属性,请参阅方法属性

示例

全部展开

定义名为 SmoothPlot 的类,该类使用一条蓝色点线和该线条经过平滑处理的版本绘制一组数据。

要定义该类,请创建包含以下类定义的名为 SmoothPlot.m 的文件,该文件具有如下特性:

  • XDataYData 公共属性,用于存储原始线条的 xy 坐标数据。

  • SmoothColorSmoothWidth 公共属性,用于控制平滑线条的颜色和宽度。

  • OriginalLineSmoothLine 私有属性,用于存储原始数据和平滑数据的 Line 对象。

  • 一个 setup 方法,用于初始化 OriginalLineSmoothLine

  • 一个 update 方法,当用户更改属性值时,该方法会更新绘图。

  • 一个 createSmoothData 方法,用于计算 YData 的经过平滑处理的版本。

classdef SmoothPlot < matlab.graphics.chartcontainer.ChartContainer
    properties
        XData (1,:) double = NaN
        YData (1,:) double = NaN
        SmoothColor (1,3) double {mustBeGreaterThanOrEqual(SmoothColor,0),...
            mustBeLessThanOrEqual(SmoothColor,1)} = [0.9290 0.6940 0.1250]
        SmoothWidth (1,1) double = 2
    end
    properties(Access = private,Transient,NonCopyable)
        OriginalLine (1,1) matlab.graphics.chart.primitive.Line
        SmoothLine (1,1) matlab.graphics.chart.primitive.Line
    end
    
    methods(Access = protected)
        function setup(obj)
            % Create the axes
            ax = getAxes(obj);
            
            % Create the original and smooth lines
            obj.OriginalLine = plot(ax,NaN,NaN,'LineStyle',':');
            hold(ax,'on')
            obj.SmoothLine = plot(ax,NaN,NaN);
            hold(ax,'off')
        end
        function update(obj)
            % Update line data
            obj.OriginalLine.XData = obj.XData;
            obj.OriginalLine.YData = obj.YData;
            obj.SmoothLine.XData = obj.XData;
            obj.SmoothLine.YData = createSmoothData(obj);
            
            % Update line color and width
            obj.SmoothLine.Color = obj.SmoothColor;
            obj.SmoothLine.LineWidth = obj.SmoothWidth;
        end
        function sm = createSmoothData(obj)
            % Calculate smoothed data
            v = ones(1,10)*0.1;
            sm = conv(obj.YData,v,'same');
        end
    end
end

接下来,创建一对 xy 向量。调用 ChartContainer 类提供的 SmoothPlot 构造函数方法来绘制 xy。指定 'XData''YData' 名称-值对组参量,并以 c 形式返回对象。

x = 1:1:100;
y = 10*sin(x./5) + 8*sin(10.*x + 0.5);
c = SmoothPlot('XData',x,'YData',y);

使用 c 将平滑线的颜色更改为红色。

c.SmoothColor = [1 0 0];

提示

避免在图类的 setupupdate 方法中调用 drawnow。在 setupupdate 方法中调用 drawnow 会导致图内不必要的更新,从而导致视觉闪烁和对图外对象的不必要更新,这会对性能产生负面影响。

版本历史记录

在 R2019b 中推出