主要内容

优化的图表类显示可变数量的行

此示例展示如何优化图表类以显示可变数量的行数。它重用现有的线对象,这可以提高图表的性能,特别是在行数不频繁变化的情况下。有关此图表未进行优化的简单版本,请参见行数可变的图表类

中有多少列,图表就显示多少行YData矩阵,在局部极值处有圆形标记。下面的代码演示了如何:

  • 定义两个属性PlotLineArray而且ExtremaLine分别存储行和标记的对象。

  • 实现一个设置方法初始化ExtremaLine对象。

  • 实现一个更新方法获取PlotLineArray,然后根据数组中的列数从该数组中添加或减去对象YData

要定义类,请将此代码复制到编辑器中,并将其与名称一起保存OptimLocalExtremaChart.m在可写文件夹中。

classdefOptimLocalExtremaChart < matlab.graphics.chartcontainer.ChartContainer% c = OptimLocalExtremaChart('XData',X,'YData',Y,Name,Value,…)%为矩阵Y的每一列绘制一条在局部极值处有标记的直线。%您还可以指定额外的名称-值参数,' markcolor '%和'MarkerSize'。属性XData(: 1)增加一倍= NaN YData(::)翻倍= NaN MarkerColor{validatecolor}=[1 0 0]标记大小(1,1)的两倍= 5结束属性(访问=私有,瞬态,不可复制)PlotLineArray(1): matlab.graphics.chart.primitive.LineExtremaLine(1): matlab.graphics.chart.primitive.Line结束方法(访问=受保护)函数设置(obj) obj。ExtremaLine= matlab.graphics.chart.primitive.Line(...“父”、obj.getAxes ()“标记”“o”...“MarkerEdgeColor”“没有”“线型”“没有”);结束函数更新(obj)%得到坐标轴ax = getAxes(obj);根据需要创建额外的行p = obj.PlotLineArray;nPlotLinesNeeded = size(obj.)YData, 2);nPlotLinesHave =数字(p);n = nPlotLinesHave+1:nPlotLinesNeeded p(n) = matlab.graphics.chart.primitive.Line(“父”ax,...“SeriesIndex”n“线宽”2);结束%更新行n = 1:nPlotLinesNeeded p(n)。XData = obj.XData;p (n)。YData = obj.YData(:,n);结束删除不需要的行删除(p ((nPlotLinesNeeded + 1):元素个数(p))) obj。PlotLineArray = p(1:nPlotLinesNeeded);复制x坐标向量以匹配YData的大小newx = repmat(obj.XData(:),1,size(obj.YData,2));找到局部极小值和极大值并绘制标记tfmin = islocalmin(obj.YData,1);tfmax = islocalmax(obj.YData,1);obj. extremline . xdata = [newx(tfmin);newx (tfmax)];obj. extremline . ydata = [obj.YData(tfmin);obj.YData (tfmax)];obj. extremline . markerfacecolor = obj.MarkerColor;obj. extremline . markersize = obj.MarkerSize;确保极值在最上面uistack (obj。ExtremaLine,“高级”);结束结束结束

保存类文件后,可以创建图表的实例。例如:

X = linspace(0,2)';Y = cos(5*x)./(1+x ^2);c = OptimLocalExtremaChart(“XData”, x,“YData”, y);

现在,创建一个循环,在每次迭代时将额外的一行添加到绘图中。图表对象保留所有现有的行,并为每一行添加额外的行

I =1:10 y = cos(5*x+ I)./(1+x.^2);c. ydata = [c.]YData y);结束

另请参阅

相关的话题