本周的文件交换选择

我们最好的用户提交

蜘蛛图III–自定义图表(编写)

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

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

内容

编写自定义图表

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

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

Classdef.spiderchart ......matlab.graphics.chartcontainer.mixin.Legend

它需要一个我们希望我们最终用户能够设置或获得的一切的公共属性。您将注意到默认值并在属性级别完成验证。

特性(SetObservable)P{mustBeNumeric}AxesInterval(1,1)double{mustBeInteger}=3轴网格线的数量AxesPrecision = 1%蜱虫精度AxesLimits = []%轴限制FillOption matlab.lang.OnOffSwitchState=“关”%是否遮蔽数据FillTransparency(1,1)双{MustbegreathAnorequal(FillTransparency,0),MotablessThanoreQual(FillTransparency,1)}%阴影α/ / / / / / / / / / / / / / / / / / / /“DefaultAxeColorder”%的颜色顺序线型{mustBeMember(线型,{'-','-',':','-.','none'})=“- - -”数据线样式LineWidth(1,1)双倍{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

特性(访问=私有、瞬态、不可复制)taaxeslines=gobjects(0)RhoAxesLines=gobjects(0)DataLines=gobjects(0)LabelObjects=gobjects(0)FillPatches=gobjects(0)AxesTextLabels=gobjects(0)AxesTickLabels=gobjects(0)DoWholeUpdate=true AxesValues结束

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

蜘蛛图(数据)蜘蛛图(数据、,“名字”值,......蜘蛛图(父级)

所以我将在构造函数中处理它。

%建造师函数obj = SpiderChart(parentOrP, varargin) narginchk(1, inf);如果isa (parentOrP'matlab.graphics.graphics'%spiderplot(父级,p,'name',值)在= [{eartorp,“P”},varargin];其他的% SpiderPlot(P, 'name', value)在= {“P”,parentorp} varargin];结束%构造obj@matlab.graphics.chartcontainer.ChartContainer(在{:});结束

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

有两个属性(P轴心间期),当改变时可能需要调整所需的图形对象的总数(例如,可能需要在更新中创建或删除对象)。因为这个,我唯一会做的事设置设置轴属性。更新将处理图形对象创建。

函数设置(obj)%配置轴斧头= getaxes(obj);握住(斧头,“上”)轴(ax,'正方形')轴(ax,“关”结束

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

%更新实现函数更新(obj)如果obj.DoWholeUpdate%只在P或AxesInterval改变时重置和重新初始化ResetStoredGraphicsObjects(OBJ);initializeeverything(obj)obj.dowholeupdate = false;结束调整外观(obj);结束

这些是切换更新一切的setter。

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

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

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

函数重置存储的图形对象(obj)删除旧对象删除(obj.ThetaAxesLines)删除(obj.RhoAxesLines)删除(obj.DataLines)删除(obj.LabelObjects)删除(obj.FillPatches)删除(obj.AxesTextLabels)删除(obj.axestickbels)%将新的预分配为空obj.thetaaxeslines = gobjects(0);obj.rhoaxeslines = gobjects(0);obj.datalines = gobjects(0);obj.labelobjects = gobjects(0);obj.fillepatches = gobjects(0);obj.axestextlabels = gobjects(0);obj.axesticklabels = gobjects(0);obj.axesvalues = [];结束

接下来,我们初始化新对象,其中对象的数量基于的大小P轴心间期.所有这些都被初始化不可见,没有与它们相关的数据。这是我必须从原始代码中做出的最大变化 - 即我需要在不设置可自定义属性的情况下创建它们而不是创建对象而不是保留其句柄而不是创建对象而不是创建对象

函数初始化所有内容(obj)%初始化数据子项斧头= getaxes(obj);ii=对象numdata组:-1:1对象填充面片(ii)=面片(nan,nan,nan,“EdgeColor”“没有”'houspvisibility'“关”“父”、ax);obj.DataLines(ii) = line(nan, nan,)“父”、ax);结束%绘制颜色灰色= [0.5,0.5,0.5];%极性增量theta_increment = 2 *π/ obj.NumDataPoints;rho_increment = 1 / (obj.AxesInterval + 1);%%%比例数据%%%预分配P_scaled = 0(大小(obj.P));axes_range = 0 (3, obj. numdatapopoints);%遍历数据点的数量II = 1:obj.numdatapoints%积分组组分=obj.P(:,ii);%自动设置每个组的范围最小值=最小值(组点);最大值=最大值(组点);范围II=最大值-最小值;%检查axes_limits是否为空如果isempty (obj.AxesLimits)%缩放点的范围从[rho_increment, 1]p_scaled(:, ii)=((group_points  -  min_value)/范围)*(1  -  rho_increment)+ rho_increment;其他的%手动设置每个分组的范围最小值=对象轴限制(1,ii);最大值=对象轴限制(2,ii);范围ii=最大值-最小值;检查轴的极限是否在点的范围内如果Min_value > min(group_points) || max_value < max(group_points) error(错误:请确保手动指定的轴限值在数据点的范围内。);结束%缩放点的范围从[rho_increment, 1]p_scaled(:, ii)=((group_points  -  min_value)/范围)*(1  -  rho_increment)+ rho_increment;结束存储到数组Axes_range (:, ii) = [min_value;max_value;rangeii];结束极轴%%%%极坐标ρ= 0:rho_increment: 1;θ= 0:theta_increment: 2 *π;%迭代每个θ2 =(长度(θ)1):1:1%将极坐标转换为笛卡尔坐标[x_轴,y_轴]=pol2cart(θ(ii),ρ);%的阴谋对象θx线(ii)=线(ax,x_轴,y_轴,“线宽”, 1.5,......“颜色”,灰色,'houspvisibility'“关”);min_value = axes_range(1,2);范围= axes_range(3,ii);在等曲线上迭代点jj =长度(ρ):1:2坐标轴增量值axes_value = min_value +(范围/ obj.axesinterval)*(JJ-2);%显示轴文本obj。AxesValues(ii, jj-1) = axes_value;obj。axestticklabels (ii, jj-1) = text(ax, x_axes(jj), y_axes(jj)),''......“单位”“数据”......“颜色”“k”......'水平对齐''中央'......“垂直排列”“中间”......“可见的”“关”);结束结束遍历每个2 =长度(ρ):1:2%将极坐标转换为笛卡尔坐标[x_axes,y_axes] = pol2cart(θ,rho(ii));%的阴谋斜轴直线(ii-1)=直线(ax,x_轴,y_轴,“颜色”,灰色,'houspvisibility'“关”);结束%%% 阴谋 %%%%遍历数据组的数量ii=对象numdata组:-1:1%将极坐标转换为笛卡尔坐标[x_points, y_points] = pol2cart(theta(1:end-1), P_scaled(ii,:));使点成圆形x_循环=[x_点,x_点(1)];y_循环=[y_点,y_点(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));显示文本标签对象AxesTextLabels(ii)=文本(ax,x_轴(ii)+x_轴(ii)+y_轴(ii)+y_轴,''......“单位”“数据”......'水平对齐',horz_align,......'verticalalihggnment',vert_align,......“EdgeColor”“k”......“背景色”' w '......“可见的”“关”);结束结束

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

函数调整(OBJ)%根据需要重复颜色repeat_colors =修复(obj.NumDataPoints /大小(obj。颜色,1))+ 1;颜色= repmat (obj。颜色、repeat_colors 1);%补丁2 = 1:元素个数(obj.FillPatches)如果obj.FillOption obj.FillPatches(ii).FaceColor=colors(ii,:);obj.FillPatches(ii).FaceAlpha=obj.FillTransparency;其他的obj.FillPatches (ii)。FaceColor =“没有”结束结束%数据表象obj.DataLines(ii). numel = 1;线型= 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。AxesTextLabels,“可见的”“关”其他的设置(obj。AxesTextLabels,“可见的”“上”%遍历数据点的数量II = 1:obj.numdatapoints显示文本标签obj.AxesTextLabels (ii)。字符串= obj.AxesLabels {2};obj.AxesTextLabels (ii)。字形大小= obj.LabelFontSize;结束结束如果等质量(对象AxesPrecision,“没有”)设置(obj。AxesTickLabels,“可见的”“关”其他的设置(obj。AxesTickLabels,“可见的”“上”%导线更新精度ii = 1:numel(obj.AxesValues) text_str = sprintf(sprintf(“% % %如果'。obj.AxesPrecision) obj.AxesValues (ii));obj.AxesTickLabels (ii)。字符串= text_str;obj.AxesTickLabels (ii)。字形大小= obj.TickFontSize;结束结束结束

全定制图表

显然,花了一些努力,设计和大量的重构将其转化为自定义图表,并且仍然可以进一步改进,可以进行(例如,不更新一切,而是一次属性)。如果你自己想和它一起玩,这里就是完整的蜘蛛图..类定义文件。我对Moses的原始字体做了一些改进,例如分离标签字体大小和标记字体大小,并使之与字符串数组一起工作。

Classdef.spiderchart ......matlab.graphics.chartcontainer.mixin.Legend%spider_plot创建带有单个轴的spider或radar plot。%语法:% SpiderChart (PData)% SpiderChart(PData, Name, Value,…)%蜘蛛图(父级)%输入参数:% (必需的)%pdata  - 用于绘制蜘蛛图的数据点。这%行是数据组,列是% 数据点。轴标签和轴限制是如果未指定,则自动生成%。%[向量|矩阵]%名称-值对参数:% (可选的)%AxesLabels-用于指定每个轴的标签。%[自动生成(默认)| cell of string | 'none']% AxesInterval -用于更改显示的间隔数%在网之间。%[3(默认)|整数]%axesprecision  - 用于更改值的精度级别%显示在坐标轴上。输入'none'以删除%轴文本。%[1(默认)| integer | 'none']% AxesLimits -用于手动设置轴限制。一个矩阵的%2 x尺寸(p,2)。顶行是最小轴%限制,最下面一行是最大轴限制。%[自动缩放(默认)|矩阵]% DataLabels -在图例中使用的数据的标签。字符串向量百分比数量大小(pdata,1)。%filloption  - 用于切换颜色填充选项。% ['off'(默认)| 'on']%填充透明度-用于设置颜色填充透明度。%[0.1(默认)|范围内的标量(0,1)]% Color -用于指定行颜色,指定为RGB%三联体。强度必须在范围内(0,1)。% [MATLAB colors(默认)| RGB triple]% LineStyle -用于改变图形的线条样式。%['-'(默认)| '——' | ':' | '-。”|“没有”)% 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);%蜘蛛图(P,‘数据标签’,“D”+(1:3));%传说显示%%%例2:手动设置坐标轴限制。所有的不特定,可选%参数设置为其默认值。% axes_limits = [1, 2, 1, 1, 1;]10, 8, 9, 5, 10];%轴限制[min轴限制;最大轴限制]% SpiderChart(P, 'AxesLimits', axes_limits);%%%例3:设置填充选项。可以调整填充透明度。% axes_labels = {'S1', 'S2', 'S3', 'S4', 'S5'};%轴属性%轴间隔=2;%fill_option ='开';%填充透明度= 0.1;% SpiderChart (P,…%的AxesLabels, axes_labels,…%“轴间隔”,轴间隔,。。。%“填充选项”,填充选项,。。。%“填充透明”,填充透明);%%%示例4:最大参数数。% axes_labels = {'S1', 'S2', 'S3', 'S4', 'S5'};%轴属性% axes_interval = 4;%轴_精度=‘无’;% axes_limits = [1, 2, 1, 1, 1;]10, 8, 9, 5, 10];%fill_option ='开';% fill_透明度= 0.2;%颜色=[1,0,0;0,1,0;0,0,1];%线条样式='--';% line_width = 3;%标记_类型='d';%marker_size = 10;%label_font_size = 12;% tick_font_size = 8;% data_labels = ["Hello" "World" "Happy 2020"];% SpiderChart (P,…%的AxesLabels, axes_labels,…%“轴间隔”,轴间隔,。。。%的AxesPrecision, axes_precision,…%“轴极限”,轴极限,。。。%“填充选项”,填充选项,。。。%的FillTransparency, fill_transparency,…%的颜色、颜色…%'linestyle',line_style,...%“线宽”,line_width,…%的标记,marker_type,…%的MarkerSize, marker_size,…%“LabelFontSize”,标签字体大小。。。% 'TickFontSize', tick_font_size,…%的DataLabels data_labels)%传说显示特性(SetObservable)P{mustBeNumeric}AxesInterval(1,1)double{mustBeInteger}=3轴网格线的数量AxesPrecision = 1%蜱虫精度AxesLimits = []%轴限制FillOption matlab.lang.OnOffSwitchState=“关”%是否遮蔽数据FillTransparency(1,1)双{MustbegreathAnorequal(FillTransparency,0),MotablessThanoreQual(FillTransparency,1)}%阴影α/ / / / / / / / / / / / / / / / / / / /“DefaultAxeColorder”%的颜色顺序线型{mustBeMember(线型,{'-','-',':','-.','none'})=“- - -”数据线样式LineWidth(1,1)双倍{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);%数据标签结束特性(访问=私有、瞬态、不可复制)taaxeslines=gobjects(0)RhoAxesLines=gobjects(0)DataLines=gobjects(0)LabelObjects=gobjects(0)FillPatches=gobjects(0)AxesTextLabels=gobjects(0)AxesTickLabels=gobjects(0)DoWholeUpdate=true AxesValues结束特性(依赖,访问=受保护,隐藏)NumDataGroups numdatpoints结束方法%建造师函数obj = SpiderChart(parentOrP, varargin) narginchk(1, inf);如果isa (parentOrP'matlab.graphics.graphics'%spiderplot(父级,p,'name',值)在= [{eartorp,“P”},varargin];其他的% SpiderPlot(P, 'name', value)在= {“P”,parentorp} varargin];结束%构造obj@matlab.graphics.chartcontainer.ChartContainer(在{:});结束%% getters.函数numpts=get.NumDataPoints(obj)numpts=size(obj.P,2);结束函数numpts = get.NumDataGroups(obj)P, 1);结束%% setter在设置器中设置DoWholeUpdate属性。%#OK <* MCSUP>函数集。P(obj, val) obj.P = val; obj.DoWholeUpdate = true;结束函数集。AxesInterval (obj, val) obj。AxesInterval = val;obj.DoWholeUpdate= true;结束结束方法(访问=保护)%设置实现函数设置(obj)%配置轴斧头= getaxes(obj);握住(斧头,“上”)轴(ax,'正方形')轴(ax,“关”结束%更新实现函数更新(obj)如果obj.DoWholeUpdate%只在P或AxesInterval改变时重置和重新初始化ResetStoredGraphicsObjects(OBJ);initializeeverything(obj)obj.dowholeupdate = false;结束调整外观(obj);结束%调整现有图形对象函数调整(OBJ)%根据需要重复颜色repeat_colors =修复(obj.NumDataPoints /大小(obj。颜色,1))+ 1;颜色= repmat (obj。颜色、repeat_colors 1);%补丁2 = 1:元素个数(obj.FillPatches)如果obj.FillOption obj.FillPatches(ii).FaceColor=colors(ii,:);obj.FillPatches(ii).FaceAlpha=obj.FillTransparency;其他的obj.FillPatches (ii)。FaceColor =“没有”结束结束%数据表象obj.DataLines(ii). numel = 1;线型= 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。AxesTextLabels,“可见的”“关”其他的设置(obj。AxesTextLabels,“可见的”“上”%遍历数据点的数量II = 1:obj.numdatapoints显示文本标签obj.AxesTextLabels (ii)。字符串= obj.AxesLabels {2};obj.AxesTextLabels (ii)。字形大小= obj.LabelFontSize;结束结束如果等质量(对象AxesPrecision,“没有”)设置(obj。AxesTickLabels,“可见的”“关”其他的设置(obj。AxesTickLabels,“可见的”“上”%导线更新精度ii = 1:numel(obj.AxesValues) text_str = sprintf(sprintf(“% % %如果'。obj.AxesPrecision) obj.AxesValues (ii));obj.AxesTickLabels (ii)。字符串= text_str;obj.AxesTickLabels (ii)。字形大小= obj.TickFontSize;结束结束结束初始化和预配置图形对象函数初始化所有内容(obj)%初始化数据子项斧头= getaxes(obj);ii=对象numdata组:-1:1对象填充面片(ii)=面片(nan,nan,nan,“EdgeColor”“没有”'houspvisibility'“关”“父”、ax);obj.DataLines(ii) = line(nan, nan,)“父”、ax);结束%绘制颜色灰色= [0.5,0.5,0.5];%极性增量theta_increment = 2 *π/ obj.NumDataPoints;rho_increment = 1 / (obj.AxesInterval + 1);%%%比例数据%%%预分配P_scaled = 0(大小(obj.P));axes_range = 0 (3, obj. numdatapopoints);%遍历数据点的数量II = 1:obj.numdatapoints%积分组组分=obj.P(:,ii);%自动设置每个组的范围最小值=最小值(组点);最大值=最大值(组点);范围II=最大值-最小值;%检查axes_limits是否为空如果isempty (obj.AxesLimits)%缩放点的范围从[rho_increment, 1]p_scaled(:, ii)=((group_points  -  min_value)/范围)*(1  -  rho_increment)+ rho_increment;其他的%手动设置每个分组的范围最小值=对象轴限制(1,ii);最大值=对象轴限制(2,ii);范围ii=最大值-最小值;检查轴的极限是否在点的范围内如果Min_value > min(group_points) || max_value < max(group_points) error(错误:请确保手动指定的轴限值在数据点的范围内。);结束%缩放点的范围从[rho_increment, 1]p_scaled(:, ii)=((group_points  -  min_value)/范围)*(1  -  rho_increment)+ rho_increment;结束存储到数组Axes_range (:, ii) = [min_value;max_value;rangeii];结束极轴%%%%极坐标ρ= 0:rho_increment: 1;θ= 0:theta_increment: 2 *π;%迭代每个θ2 =(长度(θ)1):1:1%将极坐标转换为笛卡尔坐标[x_轴,y_轴]=pol2cart(θ(ii),ρ);%的阴谋对象θx线(ii)=线(ax,x_轴,y_轴,“线宽”, 1.5,......“颜色”,灰色,'houspvisibility'“关”);min_value = axes_range(1,2);范围= axes_range(3,ii);在等曲线上迭代点jj =长度(ρ):1:2坐标轴增量值axes_value = min_value +(范围/ obj.axesinterval)*(JJ-2);%显示轴文本obj。AxesValues(ii, jj-1) = axes_value;obj。axestticklabels (ii, jj-1) = text(ax, x_axes(jj), y_axes(jj)),''......“单位”“数据”......“颜色”“k”......'水平对齐''中央'......“垂直排列”“中间”......“可见的”“关”);结束结束遍历每个2 =长度(ρ):1:2%将极坐标转换为笛卡尔坐标[x_axes,y_axes] = pol2cart(θ,rho(ii));%的阴谋斜轴直线(ii-1)=直线(ax,x_轴,y_轴,“颜色”,灰色,'houspvisibility'“关”);结束%%% 阴谋 %%%%遍历数据组的数量ii=对象numdata组:-1:1%将极坐标转换为笛卡尔坐标[x_points, y_points] = pol2cart(theta(1:end-1), P_scaled(ii,:));使点成圆形x_循环=[x_点,x_点(1)];y_循环=[y_点,y_点(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));显示文本标签对象AxesTextLabels(ii)=文本(ax,x_轴(ii)+x_轴(ii)+y_轴(ii)+y_轴,''......“单位”“数据”......'水平对齐',horz_align,......“垂直排列”,vert_align,......“EdgeColor”“k”......“背景色”' w '......“可见的”“关”);结束结束在重新初始化之前删除图形对象并重置属性函数重置存储的图形对象(obj)删除旧对象删除(obj.ThetaAxesLines)删除(obj.RhoAxesLines)删除(obj.DataLines)删除(obj.LabelObjects)删除(obj.FillPatches)删除(obj.AxesTextLabels)删除(obj.axestickbels)%将新的预分配为空obj.thetaaxeslines = gobjects(0);obj.rhoaxeslines = gobjects(0);obj.datalines = gobjects(0);obj.labelobjects = gobjects(0);obj.fillepatches = gobjects(0);obj.axestextlabels = gobjects(0);obj.axesticklabels = gobjects(0);obj.axesvalues = [];结束结束结束函数[水平对齐、垂直对齐、x位置、y位置]=获取象限位置(θ点)找出点在哪个象限如果= 0象限= 0;eleesifθ=π/2象限=1.5;eleesifθ=π象限=2.5;eleesif== 3*pi/2象限= 3.5;eleesifθu点==2*pi象限=0;eleesif> 0 && > < /2象限= 1;eleesifθ点>π/2和θ点<π象限=2;eleesifθ点>π&θ点<3*π/2象限=3;eleesif(1) > 3*pi/2; (2) > 3*pi/2结束%根据象限调整标签对齐移动轴标号shift_pos = 0.13;开关象限案例0 horz_align =“左”;垂直对齐=“中间”;x_pos = shift_pos;y_pos = 0;案例1 horz_align =“左”;垂直对齐='底部';x_pos = shift_pos;y_pos = shift_pos;案例1.5 horz_align ='中央';垂直对齐='底部';x_pos = 0;y_pos = shift_pos;案例2 horz_align =“对”;垂直对齐='底部';x_pos=-shift_pos;y_pos=shift_pos;案例2.5水平对齐=“对”;垂直对齐=“中间”;x_pos=-shift_pos;y_pos=0;案例3水平对齐=“对”;垂直对齐=“高级”;x_pos = -shift_pos;y_pos = -shift_pos;案例3.5水平对齐='中央';垂直对齐=“高级”;x_pos = 0;y_pos = -shift_pos;案例4水平对齐=“左”;垂直对齐=“高级”;x_pos = shift_pos;y_pos = -shift_pos;结束结束

评论

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

试试吧,让我们知道你的想法在这里或离开A.评论摩西。

与MATLAB®R2020a一起发布

|

评论

要发表评论,请点击在这里登录您的MathWorks帐户或创建新的。