文件交换选择的一周

我们最好的用户提交

蜘蛛图III -自定义图表(创作)

肖恩本周我们的选择是spider_plot通过摩西

上周,我们查看了我创建的自定义图表。本周,我们将学习如何创作它。

内容

创作自定义图表

现在让我们看一下创建自定义SpiderChart的步骤。

首先,我们需要一个继承自matlab.graphics.chartcontainer.ChartContainer

classdefSpiderChart < matlab.graphics.chartcontainer.ChartContainer &matlab.graphics.chartcontainer.mixin.Legend

它需要一个公共属性,用于我们希望最终用户能够设置或获取的所有东西。你会注意到默认值和验证是在属性级别上完成的。

属性(SetObservable) P {mustbennumeric} AxesInterval(1,1) double {mustBeInteger} = 3%轴网格线的数目AxesPrecision = 1%刻度精度AxesLimits = []%轴限填充matlab.lang.OnOffSwitchState =“关闭”%是否遮挡数据FillTransparency(1,1) double {mustBeGreaterThanOrEqual(FillTransparency,0),mustBeLessThanOrEqual(FillTransparency,1)}%着色alphaColor(:,3) double {mustBeGreaterThanOrEqual(Color,0),mustBeLessThanOrEqual(Color,1)} = get(groot, 0);“defaultAxesColorOrder”%颜色顺序线型{mustBeMember(线型 ,{'-','--',':','-.',' 没有'})}=“- - -”%数据线样式LineWidth(1,1) double {mustBePositive} = 2%数据线宽度{mustBeMember标志(标志,{' + ',' o ','*','.',' x”、“广场”、“s”、“钻石”、“d”、“v ','^','>','<',' 五角星形”、“p”、“卦”、“h”、“没有'})}=“o”%数据标记MarkerSize(1,1) double {mustBePositive} = 8%数据标记大小LabelFontSize(1,1) double {mustBePositive} = 10%标签字体大小TickFontSize(1,1) double {mustBePositive} = 10%勾字号AxesLabels =“标签”+ (1:10 0);%轴标签DataLabels =“数据”+ (1:10 0);%数据标签结束

我们还需要底层图形对象的属性,图表将根据需要创建、调整或销毁这些属性。这些无法保存或复制,所以它们将被瞬态NonCopyable

属性(Access = private, Transient, NonCopyable) ThetaAxesLines = objects(0) RhoAxesLines = objects(0) DataLines = objects(0) LabelObjects = objects(0) FillPatches = objects(0) AxesTextLabels = objects(0) axestticklabels = objects(0) DoWholeUpdate = true AxesValues结束

然后我们需要一个构造函数。我希望我的类有两个正常的语法图表,即:

SpiderChart(数据)SpiderChart(数据、“名字”值,____ SpiderChart(父)

我将在构造函数中处理这个。

%的构造函数函数obj = SpiderChart(parentOrP, varargin) narginchk(1, inf);如果isa (parentOrP“matlab.graphics.Graphics”% SpiderPlot(父元素,P, 'name', value)in = [{parentOrP,“P”},变长度输入宗量);其他的% SpiderPlot(P, 'name', value)In = [{]“P”, parentOrP} varargin];结束%构造obj@matlab.graphics.chartcontainer.ChartContainer ({});结束

对于自定义图表,我们需要设置更新方法。该设置在构建图表时运行一次,并在更改属性时更新drawnow调用。

有两个属性(PAxesInterval),当更改时可能需要调整所需图形对象的总数(即可能需要在更新中创建或删除对象)。因为这个,我唯一能做的设置就是设置坐标轴的属性。更新将处理图形对象的创建。

函数设置(obj)%配置轴ax = getAxes(obj);(ax,“上”)轴(ax,“广场”)轴(ax,“关闭”结束

是否销毁和重建对象的决定是基于DoWholeUpdate属性,在上述属性的设置器中进行调整。它也默认为true,所以在第一次运行时,一切都创建好了。

%更新实现函数更新(obj)如果obj。DoWholeUpdate%只有当P或AxesInterval改变时才重置和重新初始化resetStoredGraphicsObjects (obj);initializeEverything (obj) obj。DoWholeUpdate = false;结束adjustAppearances (obj);结束

这些是切换更新所有东西的setter。

函数集。P(obj, val) obj.P = val; obj.DoWholeUpdate = true;结束
函数集。AxesInterval(obj, val)AxesInterval = val;obj。DoWholeUpdate = true;结束

更新方法,可以看到算法主要有三个部分:resetStoredGraphicsObjectsinitializeEverything,adjustAppearances

重置步骤删除旧的图形对象,并重新初始化属性为空图形占位符。

函数resetStoredGraphicsObjects (obj)%删除旧对象delete(obj.ThetaAxesLines) delete(obj.RhoAxesLines) delete(obj.DataLines) delete(obj.LabelObjects) delete(obj.FillPatches) delete(obj.AxesTextLabels) delete(obj.AxesTickLabels)%将新文件预分配为空obj。的taAxesLines = gobjects(0); obj.RhoAxesLines = gobjects(0); obj.DataLines = gobjects(0); obj.LabelObjects = gobjects(0); obj.FillPatches = gobjects(0); obj.AxesTextLabels = gobjects(0); obj.AxesTickLabels = gobjects(0); obj.AxesValues = [];结束

接下来,我们初始化新对象,其中对象的数量基于的大小PAxesInterval.它们都被初始化为不可见的,没有与它们关联的数据。这是我必须从原始代码中做出的最大改变——也就是说,不是创建对象而不保留它们的句柄,我需要在不设置它们的可定制属性的情况下创建它们,存储句柄,然后再调整这些属性。

函数initializeEverything (obj)%初始化子数据ax = getAxes(obj);Ii = obj。obj.FillPatches(ii) = patch(nan, nan, nan;“EdgeColor”“没有”“HandleVisibility”“关闭”“父”、ax);obj.DataLines(ii) = line(nan, nan,“父”、ax);结束%绘图颜色灰色= [0.5,0.5,0.5];%极坐标增量theta_increment = 2*pi/obj. numdatpoints;rho_increment = 1/(obj.AxesInterval+1);%%% Scale数据%%%%预P_scaled = 0 (size(obj.P));axes_range = 0 (3, obj. numdatpoints);%迭代数个数据点Ii = 1:obj。NumDataPoints%分组点数Group_points = obj。P(:,(二);%自动显示每组的范围Min_value = min(group_points);Max_value = max(group_points);Rangeii = max_value - min_value;%检查axes_limits是否为空如果isempty (obj.AxesLimits)%刻度指向从[rho_increment, 1]开始的范围P_scaled(:, ii) = ((group_points - min_value) / rangeii) * (1 - rho_increment) + rho_increment;其他的%手动设置每个分组的范围Min_value = obj。AxesLimits(1、2);Max_value = obj。AxesLimits (2, 2);Rangeii = max_value - min_value;检查轴的极限是否在点的范围内如果|| max_value < max(group_points) error(“错误:请确保手动指定的轴限制在数据点范围内。”);结束%刻度指向从[rho_increment, 1]开始的范围P_scaled(:, ii) = ((group_points - min_value) / rangeii) * (1 - rho_increment) + rho_increment;结束%存储到数组Axes_range (:, ii) = [min_value;max_value;rangeii];结束%%%极轴%%%%极坐标Rho = 0:rho_increment:1;Theta = 0:theta_increment:2*pi;%迭代每个θIi = (length(theta)-1):-1:1将极坐标转换为直角坐标[x_axes, y_axes] = pol2cart(theta(ii), rho);%的阴谋obj.ThetaAxesLines(ii) = line(ax, x_axes, y_axes,“线宽”, 1.5,“颜色”,灰色,“HandleVisibility”“关闭”);Min_value = axes_range(1, ii);Rangeii = axes_range(3, ii);迭代等曲线上的点Jj = length(rho):-1:2%轴增量值axes_value = min_value + (rangeii/obj.AxesInterval) * (jj-2);%显示轴文本obj。AxesValues(ii, jj-1) = axes_value;obj。AxesTickLabels(ii, jj-1) = text(ax, x_axes(jj), y_axes(jj),“单位”“数据”“颜色”“k”“HorizontalAlignment”“中心”“VerticalAlignment”“中间”“可见”“关闭”);结束结束遍历每个rhoIi = length(rho):-1:2将极坐标转换为直角坐标[x_axes, y_axes] = pol2cart(theta, rho(ii));%的阴谋obj.RhoAxesLines(ii-1) = line(ax, x_axes, y_axes,“颜色”,灰色,“HandleVisibility”“关闭”);结束%%%剧情%%%%遍历数据组的数量Ii = obj。NumDataGroups: 1:1将极坐标转换为直角坐标[x_points, y_points] = pol2cart(theta(1:end-1), P_scaled(ii,:));%使点呈圆形X_circular = [x_points, x_points(1)];Y_circular = [y_points, y_points(1)];绘图数据点obj.DataLines (ii)。XData = x_circular;obj.DataLines (ii)。YData = y_circular;%检查填充选项是否已打开obj.FillPatches (ii)。XData = x_circular;obj.FillPatches (ii)。YData = y_circular;结束%%%标签%%%%迭代数个数据点Ii = 1:obj。NumDataPoints点的角度(以弧度为单位)[horz_align, vert_align, x_pos, y_pos] = getQuadrantPosition(theta(ii));%显示文本标签obj.AxesTextLabels(ii) = text(ax, x_axes(ii)+x_pos, y_axes(ii)+y_pos,“单位”“数据”“HorizontalAlignment”horz_align,“VerticalAlihggnment”vert_align,“EdgeColor”“k”“写成BackgroundColor”' w '“可见”“关闭”);结束结束

最后,根据属性调整外观。每当任何属性发生更改时,都会触发此函数。它更新底层图形对象的属性以实现更改。

函数adjustAppearances (obj)必要时重复颜色repeat_colors = fix(obj. numdatapots /size)颜色,1))+ 1;颜色= repmat(对象)。Color, repeat_colors, 1);%的补丁ii = 1: nummel (obj.FillPatches)如果obj。FillOption obj.FillPatches (ii)。FaceColor = colors(ii,:);obj.FillPatches (ii)。FaceAlpha = obj. filltransparent;其他的obj.FillPatches (ii)。FaceColor =“没有”;结束结束%数据显示ii = 1:numel(obj.DataLines) obj.DataLines(ii)。LineStyle = obj.LineStyle;obj.DataLines (ii)。Marker = obj.Marker;obj.DataLines (ii)。Color = colors(ii,:);obj.DataLines (ii)。LineWidth = obj.LineWidth;obj.DataLines (ii)。MarkerSize = obj.MarkerSize;obj.DataLines (ii)。MarkerFaceColor = colors(ii, :); obj.DataLines(ii).DisplayName = obj.DataLabels(ii);结束如果isequal (obj。AxesLabels,“没有”)设置(obj。AxesTextLabels,“可见”“关闭”其他的设置(obj。AxesTextLabels,“可见”“上”%迭代数个数据点Ii = 1:obj。NumDataPoints%显示文本标签obj.AxesTextLabels (ii)。String = obj.AxesLabels{ii};obj.AxesTextLabels (ii)。font = obj. labelfont;结束结束如果isequal (obj。AxesPrecision,“没有”)设置(obj。AxesTickLabels,“可见”“关闭”其他的设置(obj。AxesTickLabels,“可见”“上”%遍历以更新精度ii = 1:数值(obj.AxesValues) text_str = sprintf(sprintf(“% % %如果'。, obj.AxesPrecision), obj.AxesValues(ii);obj.AxesTickLabels (ii)。字符串= text_str;obj.AxesTickLabels (ii)。字体大小= obj. tick字体大小;结束结束结束

完整自定义图表

显然,要把它变成一个自定义图表需要一些努力、设计和大量的重构,而且还有进一步的改进可以做(例如,不是更新所有的东西,而是一次更新一个属性)。如果你想自己玩,这里是完整的SpiderChart.m类定义文件。我冒昧地对Moses的原始版本做了一些增强,例如,分离标签字体大小和标记字体大小,并使事情与字符串数组一起工作。

classdefSpiderChart < matlab.graphics.chartcontainer.ChartContainer &matlab.graphics.chartcontainer.mixin.Legend创建具有单独轴的蜘蛛或雷达图。%的语法:% SpiderChart (PData)% SpiderChart(PData, Name, Value,…)% SpiderChart(父元素,___)%输入参数:%(必需)% PData -用于绘制蜘蛛图的数据点。的%行是数据组,列是%数据点。轴的标签和轴的极限是%如果未指定则自动生成。%[向量|矩阵]%名称-值对参数:%(可选)% AxesLabels -用于指定每个轴的标签。%[自动生成(默认)|单元格的字符串| 'none']% AxesInterval -用于更改显示的间隔数在蜘蛛网之间。%[3(默认)| integer]% AxesPrecision -用于更改值的精度级别%显示在坐标轴上。输入“none”来删除%轴文本。%[1(默认)| integer | 'none']% AxesLimits -用于手动设置轴的限制。的矩阵% 2 x尺寸(P, 2)。最上面一行是最小轴%的极限,下一行是最大轴极限。%[自动缩放(默认)|矩阵]% DataLabels -要在图例中使用的数据的标签。字符串向量%表示元素大小(PData, 1)。% fillloption -用于切换颜色填充选项。%['关闭'(默认)| '打开']% FillTransparency -用于设置颜色填充透明度。%[0.1(默认)|标量在范围(0,1)]% Color -用于指定线条颜色,指定为RGB%三联体。强度必须在(0,1)范围内。% [MATLAB颜色(默认)| RGB三元组]% LineStyle -用于更改绘图的线条样式。%['-'(默认)| '——' | ':' | '-。' | 'none']% LineWidth -用于更改线宽,其中1点为1/72英寸。%[0.5(默认)|正值]% Marker -用于更改绘图的标记符号。%(“o”(默认)|”没有 ' | '*' | ' s ' | ' d ' |…]% MarkerSize -用于更改标记大小,其中1点为1/72英寸。%[8(默认)|正值]% LabelFontSize -用于更改标签和的字体大小%值显示在轴上。%[10(默认)|标量值大于零]% TickFontSize -用于更改显示值的字体大小%在坐标轴上。[10(默认)|标量值大于零]% %例子:%%例1:参数的最小数量。所有非指定,可选%参数被设置为其默认值。轴标签和极限是%自动生成和设置。% d1 = [5 3 9 1 2];%初始化数据点% d2 = [5 8 7 2 9];% d3 = [8 2 1 4 6];% p = [d1;D2;D3);% SpiderChart(P, 'DataLabels', "D" + (1:3));%图例显示%%例2:手动设置轴的限制。%所有非指定,可选%参数被设置为其默认值。% axes_limits = [1,2,1,1,1;[10,8,9,5,10];%轴限制[最小轴限制;最大轴限制]% SpiderChart(P, 'AxesLimits', axes_limits);%%%例3:设置填充选项。填充透明度可以调整。% axes_labels = {'S1', 'S2', 'S3', 'S4', 'S5'};% Axes属性% axes_interval = 2;% fill_option = 'on';% fill_transparent = 0.1;% SpiderChart (P,…% 'AxesLabels', axes_labels,…% 'AxesInterval', axes_interval,…% ' fillloption ', fill_option,…% '填充透明度',填充透明度);%%例4:参数的最大数目。% axes_labels = {'S1', 'S2', 'S3', 'S4', 'S5'};% Axes属性% axes_interval = 4;% axes_precision = 'none';% axes_limits = [1,2,1,1,1;[10,8,9,5,10];% fill_option = 'on';% fill_transparent = 0.2;% colors = [1,0,0;0,1,0;[0,0,1];% line_style = '——';% line_width = 3;% marker_type = 'd';% marker_size = 10;% label_font_size = 12;% tick_font_size = 8;% data_labels = ["Hello" "World" "Happy 2020"];% SpiderChart (P,…% 'AxesLabels', axes_labels,…% 'AxesInterval', axes_interval,…% 'AxesPrecision', axes_precision,…% 'AxesLimits', axes_limits,…% ' fillloption ', fill_option,…% ' filltransparent ', fill_transparent,…“颜色”,颜色,……% 'LineStyle', line_style,…% 'LineWidth', line_width,…% 'Marker', marker_type,…% 'MarkerSize', marker_size,…% ' labelfont_size ', label_font_size,…% ' tickfont_size ', tick_font_size,…% ' datalabel ', data_labels)%图例显示属性(SetObservable) P {mustbennumeric} AxesInterval(1,1) double {mustBeInteger} = 3%轴网格线的数目AxesPrecision = 1%刻度精度AxesLimits = []%轴限填充matlab.lang.OnOffSwitchState =“关闭”%是否遮挡数据FillTransparency(1,1) double {mustBeGreaterThanOrEqual(FillTransparency,0),mustBeLessThanOrEqual(FillTransparency,1)}%着色alphaColor(:,3) double {mustBeGreaterThanOrEqual(Color,0),mustBeLessThanOrEqual(Color,1)} = get(groot, 0);“defaultAxesColorOrder”%颜色顺序线型{mustBeMember(线型 ,{'-','--',':','-.',' 没有'})}=“- - -”%数据线样式LineWidth(1,1) double {mustBePositive} = 2%数据线宽度{mustBeMember标志(标志,{' + ',' o ','*','.',' x”、“广场”、“s”、“钻石”、“d”、“v ','^','>','<',' 五角星形”、“p”、“卦”、“h”、“没有'})}=“o”%数据标记MarkerSize(1,1) double {mustBePositive} = 8%数据标记大小LabelFontSize(1,1) double {mustBePositive} = 10%标签字体大小TickFontSize(1,1) double {mustBePositive} = 10%勾字号AxesLabels =“标签”+ (1:10 0);%轴标签DataLabels =“数据”+ (1:10 0);%数据标签结束属性(Access = private, Transient, NonCopyable) ThetaAxesLines = objects(0) RhoAxesLines = objects(0) DataLines = objects(0) LabelObjects = objects(0) FillPatches = objects(0) AxesTextLabels = objects(0) axestticklabels = objects(0) DoWholeUpdate = true AxesValues结束属性(Dependent, Access = protected, Hidden) numdataggroups num数据点结束方法%的构造函数函数obj = SpiderChart(parentOrP, varargin) narginchk(1, inf);如果isa (parentOrP“matlab.graphics.Graphics”% SpiderPlot(父元素,P, 'name', value)in = [{parentOrP,“P”},变长度输入宗量);其他的% SpiderPlot(P, 'name', value)In = [{]“P”, parentOrP} varargin];结束%构造obj@matlab.graphics.chartcontainer.ChartContainer ({});结束% % getter函数numpts = get. numdatapots (obj)P, 2);结束函数numpts = get. numdataggroups (obj)P, 1);结束% % setter可以在setter中设置DoWholeUpdate属性。% #好< * MCSUP >函数集。P(obj, val) obj.P = val; obj.DoWholeUpdate = true;结束函数集。AxesInterval(obj, val)AxesInterval = val;obj。DoWholeUpdate = true;结束结束方法(访问=受保护)%安装程序实现函数设置(obj)%配置轴ax = getAxes(obj);(ax,“上”)轴(ax,“广场”)轴(ax,“关闭”结束%更新实现函数更新(obj)如果obj。DoWholeUpdate%只有当P或AxesInterval改变时才重置和重新初始化resetStoredGraphicsObjects (obj);initializeEverything (obj) obj。DoWholeUpdate = false;结束adjustAppearances (obj);结束%调整现有图形对象函数adjustAppearances (obj)必要时重复颜色repeat_colors = fix(obj. numdatapots /size)颜色,1))+ 1;颜色= repmat(对象)。Color, repeat_colors, 1);%的补丁ii = 1: nummel (obj.FillPatches)如果obj。FillOption obj.FillPatches (ii)。FaceColor = colors(ii,:);obj.FillPatches (ii)。FaceAlpha = obj. filltransparent;其他的obj.FillPatches (ii)。FaceColor =“没有”;结束结束%数据显示ii = 1:numel(obj.DataLines) obj.DataLines(ii)。LineStyle = obj.LineStyle;obj.DataLines (ii)。Marker = obj.Marker;obj.DataLines (ii)。Color = colors(ii,:);obj.DataLines (ii)。LineWidth = obj.LineWidth;obj.DataLines (ii)。MarkerSize = obj.MarkerSize;obj.DataLines (ii)。MarkerFaceColor = colors(ii, :); obj.DataLines(ii).DisplayName = obj.DataLabels(ii);结束如果isequal (obj。AxesLabels,“没有”)设置(obj。AxesTextLabels,“可见”“关闭”其他的设置(obj。AxesTextLabels,“可见”“上”%迭代数个数据点Ii = 1:obj。NumDataPoints%显示文本标签obj.AxesTextLabels (ii)。String = obj.AxesLabels{ii};obj.AxesTextLabels (ii)。font = obj. labelfont;结束结束如果isequal (obj。AxesPrecision,“没有”)设置(obj。AxesTickLabels,“可见”“关闭”其他的设置(obj。AxesTickLabels,“可见”“上”%遍历以更新精度ii = 1:数值(obj.AxesValues) text_str = sprintf(sprintf(“% % %如果'。, obj.AxesPrecision), obj.AxesValues(ii);obj.AxesTickLabels (ii)。字符串= text_str;obj.AxesTickLabels (ii)。字体大小= obj. tick字体大小;结束结束结束%初始化和预配置图形对象函数initializeEverything (obj)%初始化子数据ax = getAxes(obj);Ii = obj。obj.FillPatches(ii) = patch(nan, nan, nan;“EdgeColor”“没有”“HandleVisibility”“关闭”“父”、ax);obj.DataLines(ii) = line(nan, nan,“父”、ax);结束%绘图颜色灰色= [0.5,0.5,0.5];%极坐标增量theta_increment = 2*pi/obj. numdatpoints;rho_increment = 1/(obj.AxesInterval+1);%%% Scale数据%%%%预P_scaled = 0 (size(obj.P));axes_range = 0 (3, obj. numdatpoints);%迭代数个数据点Ii = 1:obj。NumDataPoints%分组点数Group_points = obj。P(:,(二);%自动显示每组的范围Min_value = min(group_points);Max_value = max(group_points);Rangeii = max_value - min_value;%检查axes_limits是否为空如果isempty (obj.AxesLimits)%刻度指向从[rho_increment, 1]开始的范围P_scaled(:, ii) = ((group_points - min_value) / rangeii) * (1 - rho_increment) + rho_increment;其他的%手动设置每个分组的范围Min_value = obj。AxesLimits(1、2);Max_value = obj。AxesLimits (2, 2);Rangeii = max_value - min_value;检查轴的极限是否在点的范围内如果|| max_value < max(group_points) error(“错误:请确保手动指定的轴限制在数据点范围内。”);结束%刻度指向从[rho_increment, 1]开始的范围P_scaled(:, ii) = ((group_points - min_value) / rangeii) * (1 - rho_increment) + rho_increment;结束%存储到数组Axes_range (:, ii) = [min_value;max_value;rangeii];结束%%%极轴%%%%极坐标Rho = 0:rho_increment:1;Theta = 0:theta_increment:2*pi;%迭代每个θIi = (length(theta)-1):-1:1将极坐标转换为直角坐标[x_axes, y_axes] = pol2cart(theta(ii), rho);%的阴谋obj.ThetaAxesLines(ii) = line(ax, x_axes, y_axes,“线宽”, 1.5,“颜色”,灰色,“HandleVisibility”“关闭”);Min_value = axes_range(1, ii);Rangeii = axes_range(3, ii);迭代等曲线上的点Jj = length(rho):-1:2%轴增量值axes_value = min_value + (rangeii/obj.AxesInterval) * (jj-2);%显示轴文本obj。AxesValues(ii, jj-1) = axes_value;obj。AxesTickLabels(ii, jj-1) = text(ax, x_axes(jj), y_axes(jj),“单位”“数据”“颜色”“k”“HorizontalAlignment”“中心”“VerticalAlignment”“中间”“可见”“关闭”);结束结束遍历每个rhoIi = length(rho):-1:2将极坐标转换为直角坐标[x_axes, y_axes] = pol2cart(theta, rho(ii));%的阴谋obj.RhoAxesLines(ii-1) = line(ax, x_axes, y_axes,“颜色”,灰色,“HandleVisibility”“关闭”);结束%%%剧情%%%%遍历数据组的数量Ii = obj。NumDataGroups: 1:1将极坐标转换为直角坐标[x_points, y_points] = pol2cart(theta(1:end-1), P_scaled(ii,:));%使点呈圆形X_circular = [x_points, x_points(1)];Y_circular = [y_points, y_points(1)];绘图数据点obj.DataLines (ii)。XData = x_circular;obj.DataLines (ii)。YData = y_circular;%检查填充选项是否已打开obj.FillPatches (ii)。XData = x_circular;obj.FillPatches (ii)。YData = y_circular;结束%%%标签%%%%迭代数个数据点Ii = 1:obj。NumDataPoints点的角度(以弧度为单位)[horz_align, vert_align, x_pos, y_pos] = getQuadrantPosition(theta(ii));%显示文本标签obj.AxesTextLabels(ii) = text(ax, x_axes(ii)+x_pos, y_axes(ii)+y_pos,“单位”“数据”“HorizontalAlignment”horz_align,“VerticalAlignment”vert_align,“EdgeColor”“k”“写成BackgroundColor”' w '“可见”“关闭”);结束结束在重新初始化之前,删除图形对象并重置属性函数resetStoredGraphicsObjects (obj)%删除旧对象delete(obj.ThetaAxesLines) delete(obj.RhoAxesLines) delete(obj.DataLines) delete(obj.LabelObjects) delete(obj.FillPatches) delete(obj.AxesTextLabels) delete(obj.AxesTickLabels)%将新文件预分配为空obj。的taAxesLines = gobjects(0); obj.RhoAxesLines = gobjects(0); obj.DataLines = gobjects(0); obj.LabelObjects = gobjects(0); obj.FillPatches = gobjects(0); obj.AxesTextLabels = gobjects(0); obj.AxesTickLabels = gobjects(0); obj.AxesValues = [];结束结束结束函数[horz_align, vert_align, x_pos, y_pos] = getQuadrantPosition(theta_point)找出该点在哪个象限如果Theta_point == 0象限= 0;elseifTheta_point == pi/2象限= 1.5;elseifTheta_point == PI象限= 2.5;elseifTheta_point == 3*pi/2象限= 3.5;elseifTheta_point == 2*象限= 0;elseifTheta_point > 0 && Theta_point < pi/2象限= 1;elseifTheta_point > pi/2 && Theta_point < pi象限= 2;elseifTheta_point > PI && Theta_point < 3* PI /2象限= 3;elseifTheta_point > 3*pi/2 && Theta_point < 2*pi象限= 4;结束根据象限调整标签对齐方式% Shift轴标号Shift_pos = 0.13;开关象限情况下0 horz_align =“左”;vert_align =“中间”;X_pos = shift_pos;Y_pos = 0;情况下1 . horz_align =“左”;vert_align =“底”;X_pos = shift_pos;Y_pos = shift_pos;情况下1.5 horz_align =“中心”;vert_align =“底”;X_pos = 0;Y_pos = shift_pos;情况下2 . horz_align =“对”;vert_align =“底”;X_pos = -shift_pos;Y_pos = shift_pos;情况下2.5 horz_align = . 1.6“对”;vert_align =“中间”;X_pos = -shift_pos;Y_pos = 0;情况下3 . horz_align =“对”;vert_align =“高级”;X_pos = -shift_pos;Y_pos = -shift_pos;情况下3.5 horz_align =“中心”;vert_align =“高级”;X_pos = 0;Y_pos = -shift_pos;情况下4 . horz_align =“左”;vert_align =“高级”;X_pos = shift_pos;Y_pos = -shift_pos;结束结束

评论

您是否使用自定义图表或您希望MathWorks制作的图表?

试试吧,让我们知道你的想法在这里或者留下评论摩西。

用MATLAB®R2020a发布

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。