文件交换的选择

我们最好的用户提交

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

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

上周,我们看着我创建自定义的图表。本周,我们来看看编辑它。

内容

编写自定义图表

现在让我们看看作者定制SpiderChart的步骤。

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

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

它需要一个公共财产我们希望我们所做的一切最终用户能够设置或获取。你会注意到违约和验证是在属性层面上完成的。

属性(SetObservable) P {mustBeNumeric} AxesInterval(1,1)双{mustBeInteger} = 3%坐标网格线的数量AxesPrecision = 1%蜱虫精度AxesLimits = []%轴的限制FillOption matlab.lang。OnOffSwitchState =“关闭”%是否阴影数据FillTransparency(1, 1)双{mustBeGreaterThanOrEqual (FillTransparency, 0), mustBeLessThanOrEqual (FillTransparency, 1)}%阴影α颜色(:,3)双{mustBeGreaterThanOrEqual(颜色,0),mustBeLessThanOrEqual(颜色,1)}=得到(大的,“defaultAxesColorOrder”)%的颜色顺序线型{mustBeMember(线型,{' - ',' - ',':','。','没有'})}=“- - -”%数据线风格线宽(1,1){mustBePositive} = 2的两倍%数据线宽{mustBeMember标志(标志,{‘+’,‘o’,‘*’,‘。’,‘x’,‘方’,‘s’,‘钻石’,‘d’,‘v’,“^”、“>”、“<”、“五角星形”、“p”、“卦”、“h”、“没有'})}=“o”%数据标记MarkerSize(1,1)双{mustBePositive} = 8%数据标志的大小LabelFontSize(1,1)双{mustBePositive} = 10%的标签字体大小TickFontSize(1,1)双{mustBePositive} = 10%蜱虫字体大小AxesLabels =“标签”+ (1:10 0);%坐标轴标签DataLabels =“数据”+ (1:10 0);%数据标签结束

我们也需要我们的图表的底层图形对象的属性将创建,必要时调整,或破坏。这些不能被保存或复制,所以他们会瞬态NonCopyable

属性(=私人访问,瞬态NonCopyable) ThetaAxesLines = gobject (0) RhoAxesLines = gobject (0) DataLines = gobject (0) LabelObjects = gobject (0) FillPatches = gobject (0) AxesTextLabels = gobject (0) AxesTickLabels = gobject (0) DoWholeUpdate = true AxesValues结束

然后我们需要一个构造函数。我希望我的班级均正常语法图表,例如:

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

所以我要在构造函数中处理这个问题。

%的构造函数函数obj = SpiderChart (parentOrP变长度输入宗量)narginchk(正);如果isa (parentOrP“matlab.graphics.Graphics”)% SpiderPlot(父,P,“名字”,值)在= {parentOrP,“P”},变长度输入宗量);其他的% SpiderPlot (P,“名字”,值)在= {“P”,parentOrP}变长度输入宗量);结束%构造obj@matlab.graphics.chartcontainer.ChartContainer ({});结束

自定义图表,我们需要有一个设置更新方法。设置运行时一旦构造图和更新任何时候改变和属性drawnow调用。

有两个属性(P,AxesInterval),当改变可能需要调整所需的图形对象总数(即可能需要创建或删除对象的更新)。正因为如此,我要做的唯一的事设置设置轴属性。更新处理图形对象创建。

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

决定是否摧毁和重建对象是基于DoWholeUpdate属性调整上述属性的setter。也默认为真正的首次运行,一切都是创造出来的。

%更新实现函数更新(obj)如果obj.DoWholeUpdate%只有复位重新启动,如果P或者AxesInterval改变resetStoredGraphicsObjects (obj);initializeEverything (obj) obj。DoWholeUpdate = false;结束adjustAppearances (obj);结束

这些setter切换更新一切。

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

更新方法中,您可以看到有三个主要算法的部分:resetStoredGraphicsObjects,initializeEverything,adjustAppearances

重置步骤删除旧的图形对象和重新启动空图像占位符的属性。

函数resetStoredGraphicsObjects (obj)%删除旧的对象删除(obj.ThetaAxesLines)删除(obj.RhoAxesLines)删除(obj.DataLines)删除(obj.LabelObjects)删除(obj.FillPatches)删除(obj.AxesTextLabels)删除(obj.AxesTickLabels)% Preallocate新的清空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);2 = obj.NumDataGroups: 1:1obj。FillPatches(ii) = patch(nan, nan, nan,“EdgeColor”,“没有”,“HandleVisibility”,“关闭”,“父”、ax);obj.DataLines (ii) =线(南、南“父”、ax);结束%绘制颜色灰色= (0.5,0.5,0.5);%极地增量theta_increment = 2 *π/ obj.NumDataPoints;rho_increment = 1 / (obj.AxesInterval + 1);% % % % % %规模数据%预P_scaled = 0(大小(obj.P));obj.NumDataPoints axes_range = 0(3日);%遍历数据点的数量2 = 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(:,(二)= ((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;%检查轴的限制范围内的点如果min_value > min (group_points) | | max_value <马克斯(group_points)错误(错误:请确保手动指定轴的限制范围内的数据点。);结束%点扩展到从[rho_increment, 1]P_scaled(:,(二)= ((group_points - min_value) / rangeii) * (1 - rho_increment) + rho_increment;结束%存储阵列axes_range(:,(二)= [min_value;max_value;rangeii];结束% % % % % %极轴%极坐标ρ= 0:rho_increment: 1;θ= 0:theta_increment: 2 *π;%遍历每个θ2 =(长度(θ)1):1:1%将极坐标转换成笛卡尔坐标系[x_axes, y_axes] = pol2cart(θ(ii),ρ);%的阴谋obj.ThetaAxesLines (ii) =线(ax, x_axes y_axes,“线宽”,1.5,“颜色”,灰色,“HandleVisibility”,“关闭”);min_value = axes_range (1、2);rangeii = axes_range (ii);%视为迭代点jj =长度(ρ):1:2%轴增量值axes_value = min_value + (rangeii / obj.AxesInterval) * (jj-2);%显示轴文本obj。jj-1 AxesValues (2) = axes_value;obj。AxesTickLabels (ii, jj-1) =文本(ax, x_axes (jj) y_axes (jj),,“单位”,“数据”,“颜色”,“k”,“HorizontalAlignment”,“中心”,“VerticalAlignment”,“中间”,“可见”,“关闭”);结束结束%遍历每个ρ2 =长度(ρ):1:2%将极坐标转换成笛卡尔坐标系[x_axes, y_axes] = pol2cart(θ,ρ(ii));%的阴谋obj.RhoAxesLines (ii-1) =线(ax, x_axes y_axes,“颜色”,灰色,“HandleVisibility”,“关闭”);结束% % % % % %%遍历数据组的数量2 = obj.NumDataGroups: 1:1%将极坐标转换成笛卡尔坐标系[x_points, y_points] = pol2cart(θ(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;结束% % % % % %标签%遍历数据点的数量2 = 1:obj.NumDataPoints%角点的弧度[horz_align, vert_align x_pos y_pos] = getQuadrantPosition(θ(ii));%显示文本标签obj.AxesTextLabels (ii) =文本(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 =修复(obj.NumDataPoints /大小(obj。颜色,1))+ 1;颜色= repmat (obj。颜色、repeat_colors 1);%的补丁2 = 1:元素个数(obj.FillPatches)如果obj。FillOption obj.FillPatches (ii)。FaceColor =颜色(ii):);obj.FillPatches (ii)。FaceAlpha = obj.FillTransparency;其他的obj.FillPatches (ii)。FaceColor =“没有”;结束结束%数据表象2 = 1:元素个数(obj.DataLines) obj.DataLines (ii)。线型= obj.LineStyle;obj.DataLines (ii)。标志= obj.Marker;obj.DataLines (ii)。颜色=颜色(ii):);obj.DataLines (ii)。线宽= 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,“可见”,“上”)%遍历数据点的数量2 = 1:obj.NumDataPoints%显示文本标签obj.AxesTextLabels (ii)。字符串= obj.AxesLabels {2};obj.AxesTextLabels (ii)。字形大小= obj.LabelFontSize;结束结束如果isequal (obj.AxesPrecision“没有”)设置(obj.AxesTickLabels“可见”,“关闭”)其他的集(obj.AxesTickLabels,“可见”,“上”)%遍历更新的精度2 = 1:元素个数(obj.AxesValues) text_str = sprintf (sprintf (“% % %如果'。obj.AxesPrecision) obj.AxesValues (ii));obj.AxesTickLabels (ii)。字符串= text_str;obj.AxesTickLabels (ii)。字形大小= obj.TickFontSize;结束结束结束

完全自定义图表

显然,经过一些努力,设计和大量的重构把这变成一个自定义图表还有进一步改进,可以(例如不更新,但是一个属性)。如果你想玩自己,这是完整的SpiderChart.m类定义文件。我冒昧,让几个增强摩西的原始,如分离标签字形大小和勾字形大小,使事情处理字符串数组。

classdefSpiderChart < matlab.graphics.chartcontainer。ChartContainer &matlab.graphics.chartcontainer.mixin.Legend% spider_plot创建一个蜘蛛或雷达情节与单个轴。%%的语法:% SpiderChart (PData)% SpiderChart (PData、名称、值,…)___ % SpiderChart(父)%%输入参数:%(必需)% PData——数据点用来绘制蜘蛛图。的%的行和列的数据组的%的数据点。坐标轴标签和轴的限制如果未指定%自动生成。%(向量|矩阵)%%名称-值对参数:%(可选)% AxesLabels——用于指定标签的每个轴。%(自动生成的字符串(默认)|细胞| '没有']%% AxesInterval——用于改变间隔显示的数量%之间的网。%(3(默认)|整数)%% AxesPrecision——用于改变值的精度水平%显示在轴上。进入“没有”删除%轴文本。%[1(默认)|整数| '没有']%% AxesLimits——用于手动设置轴的极限。一个矩阵的% 2 x大小(P, 2)。第一行是最低轴%限制和bottow行最大轴的极限。% (auto-scaled(默认)|矩阵)%% DataLabels——标签数据用于传奇。字符串向量%的元素数量大小(PData, 1)。%% FillOption——用于切换颜色填充选项。%(“关闭”(默认)| '在']%% FillTransparency:用于设置颜色填充透明度。%[0.1(默认)|标量范围(0,1))%%——用于指定线颜色,指定为RGB%三联体。强度必须在(0,1)。% (MATLAB颜色(默认)| RGB值)%%线型:用来改变故事情节的线条样式。%(“-”(默认)|”——“|”:“|”。”|“没有”)%%线宽——用于改变线宽,1点在哪里% 1/72英寸。%[0.5(默认)|正值)%%标记,用于改变故事情节的标志符号。% (“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_interval = 2;% fill_option = '在';% fill_transparency = 0.1;% SpiderChart (P,…%的AxesLabels, axes_labels,…%的AxesInterval, axes_interval,…%的FillOption, fill_option,…% FillTransparency, fill_transparency);%% %%示例4:最大数量的参数。%% axes_labels = {S1, S2, S3、S4, S5的};%轴属性% axes_interval = 4;% axes_precision = '没有';% axes_limits = [1、2、1, 1, 1;10、8、9、5、10];% fill_option = '在';% fill_transparency = 0.2;%的颜色= (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 =[“你好”“世界”“2020”快乐);% SpiderChart (P,…%的AxesLabels, axes_labels,…%的AxesInterval, axes_interval,…%的AxesPrecision, axes_precision,…%的AxesLimits, axes_limits,…%的FillOption, fill_option,…%的FillTransparency, fill_transparency,…%的颜色、颜色…%的线型,line_style,…%“线宽”,line_width,…%的标记,marker_type,…%的MarkerSize, marker_size,…%的LabelFontSize, label_font_size,…%的TickFontSize, tick_font_size,…%的DataLabels data_labels)%传说显示属性(SetObservable) P {mustBeNumeric} AxesInterval(1,1)双{mustBeInteger} = 3%坐标网格线的数量AxesPrecision = 1%蜱虫精度AxesLimits = []%轴的限制FillOption matlab.lang。OnOffSwitchState =“关闭”%是否阴影数据FillTransparency(1, 1)双{mustBeGreaterThanOrEqual (FillTransparency, 0), mustBeLessThanOrEqual (FillTransparency, 1)}%阴影α颜色(:,3)双{mustBeGreaterThanOrEqual(颜色,0),mustBeLessThanOrEqual(颜色,1)}=得到(大的,“defaultAxesColorOrder”)%的颜色顺序线型{mustBeMember(线型,{' - ',' - ',':','。','没有'})}=“- - -”%数据线风格线宽(1,1){mustBePositive} = 2的两倍%数据线宽{mustBeMember标志(标志,{‘+’,‘o’,‘*’,‘。’,‘x’,‘方’,‘s’,‘钻石’,‘d’,‘v’,“^”、“>”、“<”、“五角星形”、“p”、“卦”、“h”、“没有'})}=“o”%数据标记MarkerSize(1,1)双{mustBePositive} = 8%数据标志的大小LabelFontSize(1,1)双{mustBePositive} = 10%的标签字体大小TickFontSize(1,1)双{mustBePositive} = 10%蜱虫字体大小AxesLabels =“标签”+ (1:10 0);%坐标轴标签DataLabels =“数据”+ (1:10 0);%数据标签结束属性(=私人访问,瞬态NonCopyable) ThetaAxesLines = gobject (0) RhoAxesLines = gobject (0) DataLines = gobject (0) LabelObjects = gobject (0) FillPatches = gobject (0) AxesTextLabels = gobject (0) AxesTickLabels = gobject (0) DoWholeUpdate = true AxesValues结束属性(隐藏的依赖,访问=保护)NumDataGroups NumDataPoints结束方法%的构造函数函数obj = SpiderChart (parentOrP变长度输入宗量)narginchk(正);如果isa (parentOrP“matlab.graphics.Graphics”)% SpiderPlot(父,P,“名字”,值)在= {parentOrP,“P”},变长度输入宗量);其他的% SpiderPlot (P,“名字”,值)在= {“P”,parentOrP}变长度输入宗量);结束%构造obj@matlab.graphics.chartcontainer.ChartContainer ({});结束% % getter函数numpts = get.NumDataPoints (obj) numpts =大小(obj。P, 2);结束函数numpts = get.NumDataGroups (obj) numpts =大小(obj。P, 1);结束% % setter%可以设置DoWholeUpdate属性setter。% #好< * MCSUP >函数set.P (obj, val) obj。P = val;obj.DoWholeUpdate= true;结束函数set.AxesInterval (obj, val) obj。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 =修复(obj.NumDataPoints /大小(obj。颜色,1))+ 1;颜色= repmat (obj。颜色、repeat_colors 1);%的补丁2 = 1:元素个数(obj.FillPatches)如果obj。FillOption obj.FillPatches (ii)。FaceColor =颜色(ii):);obj.FillPatches (ii)。FaceAlpha = obj.FillTransparency;其他的obj.FillPatches (ii)。FaceColor =“没有”;结束结束%数据表象2 = 1:元素个数(obj.DataLines) obj.DataLines (ii)。线型= obj.LineStyle;obj.DataLines (ii)。标志= obj.Marker;obj.DataLines (ii)。颜色=颜色(ii):);obj.DataLines (ii)。线宽= 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,“可见”,“上”)%遍历数据点的数量2 = 1:obj.NumDataPoints%显示文本标签obj.AxesTextLabels (ii)。字符串= obj.AxesLabels {2};obj.AxesTextLabels (ii)。字形大小= obj.LabelFontSize;结束结束如果isequal (obj.AxesPrecision“没有”)设置(obj.AxesTickLabels“可见”,“关闭”)其他的集(obj.AxesTickLabels,“可见”,“上”)%遍历更新的精度2 = 1:元素个数(obj.AxesValues) text_str = sprintf (sprintf (“% % %如果'。obj.AxesPrecision) obj.AxesValues (ii));obj.AxesTickLabels (ii)。字符串= text_str;obj.AxesTickLabels (ii)。字形大小= obj.TickFontSize;结束结束结束%初始化和preconfigure图形对象函数initializeEverything (obj)%初始化数据的孩子ax = getAxes (obj);2 = obj.NumDataGroups: 1:1obj。FillPatches(ii) = patch(nan, nan, nan,“EdgeColor”,“没有”,“HandleVisibility”,“关闭”,“父”、ax);obj.DataLines (ii) =线(南、南“父”、ax);结束%绘制颜色灰色= (0.5,0.5,0.5);%极地增量theta_increment = 2 *π/ obj.NumDataPoints;rho_increment = 1 / (obj.AxesInterval + 1);% % % % % %规模数据%预P_scaled = 0(大小(obj.P));obj.NumDataPoints axes_range = 0(3日);%遍历数据点的数量2 = 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(:,(二)= ((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;%检查轴的限制范围内的点如果min_value > min (group_points) | | max_value <马克斯(group_points)错误(错误:请确保手动指定轴的限制范围内的数据点。);结束%点扩展到从[rho_increment, 1]P_scaled(:,(二)= ((group_points - min_value) / rangeii) * (1 - rho_increment) + rho_increment;结束%存储阵列axes_range(:,(二)= [min_value;max_value;rangeii];结束% % % % % %极轴%极坐标ρ= 0:rho_increment: 1;θ= 0:theta_increment: 2 *π;%遍历每个θ2 =(长度(θ)1):1:1%将极坐标转换成笛卡尔坐标系[x_axes, y_axes] = pol2cart(θ(ii),ρ);%的阴谋obj.ThetaAxesLines (ii) =线(ax, x_axes y_axes,“线宽”,1.5,“颜色”,灰色,“HandleVisibility”,“关闭”);min_value = axes_range (1、2);rangeii = axes_range (ii);%视为迭代点jj =长度(ρ):1:2%轴增量值axes_value = min_value + (rangeii / obj.AxesInterval) * (jj-2);%显示轴文本obj。jj-1 AxesValues (2) = axes_value;obj。AxesTickLabels (ii, jj-1) =文本(ax, x_axes (jj) y_axes (jj),,“单位”,“数据”,“颜色”,“k”,“HorizontalAlignment”,“中心”,“VerticalAlignment”,“中间”,“可见”,“关闭”);结束结束%遍历每个ρ2 =长度(ρ):1:2%将极坐标转换成笛卡尔坐标系[x_axes, y_axes] = pol2cart(θ,ρ(ii));%的阴谋obj.RhoAxesLines (ii-1) =线(ax, x_axes y_axes,“颜色”,灰色,“HandleVisibility”,“关闭”);结束% % % % % %%遍历数据组的数量2 = obj.NumDataGroups: 1:1%将极坐标转换成笛卡尔坐标系[x_points, y_points] = pol2cart(θ(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;结束% % % % % %标签%遍历数据点的数量2 = 1:obj.NumDataPoints%角点的弧度[horz_align, vert_align x_pos y_pos] = getQuadrantPosition(θ(ii));%显示文本标签obj.AxesTextLabels (ii) =文本(ax, x_axes (ii) + x_pos y_axes (ii) + y_pos,,“单位”,“数据”,“HorizontalAlignment”horz_align,“VerticalAlignment”vert_align,“EdgeColor”,“k”,“写成BackgroundColor”,' w ',“可见”,“关闭”);结束结束%重新初始化之前删除图形对象和重置属性函数resetStoredGraphicsObjects (obj)%删除旧的对象删除(obj.ThetaAxesLines)删除(obj.RhoAxesLines)删除(obj.DataLines)删除(obj.LabelObjects)删除(obj.FillPatches)删除(obj.AxesTextLabels)删除(obj.AxesTickLabels)% Preallocate新的清空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 = =π/ 2象限= 1.5;elseiftheta_point = =π象限= 2.5;elseiftheta_point = = 3 *π/ 2象限= 3.5;elseiftheta_point = = 2 *π象限= 0;elseiftheta_point > 0 & & theta_point <π/ 2象限= 1;elseiftheta_point >π/ 2 & & theta_point <π象限= 2;elseiftheta_point >π& & theta_point < 3 *π/ 2象限= 3;elseiftheta_point > 3 *π/ 2 & & theta_point < 2 *π象限= 4;结束%根据象限调整标签对齐%移轴标签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 =“对”;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アカウントにサインインするか新しいMathWorksアカウントを作成します。