本周文件交换精选

我们最好的用户提交

蜘蛛图和更多的论证验证

汪东城本周的选择是spider_plot通过摩西

有不少“蜘蛛情节”但摩西写的这张引起了我的注意,有几个原因。

  • 摩西在功能中包含了一个详细的帮助。
帮助spider_plot
spider_plot创建带有单个轴的spider或radar plot。语法:spider_plot(P)spider_plot(uuuu,Name,Value)输入参数:(必选)P-用于绘制spider图表的数据点。行是数据组,列是数据点。如果未指定,将自动生成轴标签和轴限制。[vector | matrix]名称-值对参数:(可选)AxesLabels-用于指定每个轴的标签。[自动生成(默认)|字符串单元格|“无”]AxesInterval-用于更改站点之间显示的间隔数。[3(默认)|整数]AxesPrecision-用于更改轴上显示的值的精度级别。输入“无”以删除轴文本。[1(默认)|整数|“无”]轴限制-用于手动设置轴限制。一个2倍大小的矩阵(P,2)。最上面一行是最小轴限制,最下面一行是最大轴限制。[自动缩放(默认)|矩阵]填充选项-用于切换颜色填充选项。['off'(默认)|'on']FillTransparency-用于设置颜色填充透明度。[0.1(默认)|范围内的标量(0,1)]颜色-用于指定线条颜色,指定为RGB三元组。强度必须在(0,1)范围内。[MATLAB颜色(默认)| RGB三元组]线型-用于更改绘图的线型。['-'(默认值)|'-':'|'-.'|'无']线宽-用于更改线宽,其中1点为1/72英寸。[0.5(默认)|正值]标记-用于更改绘图的标记符号。['o'(默认)|'none'|'*'|'s'|'d'|…]标记大小-用于更改标记大小,其中1点为1/72英寸。[8(默认)|正值]字体大小-用于更改标签的字体大小和轴上显示的值。[10(默认)|标量值大于零]示例:%1示例:最小参数数。所有未指定的可选参数都设置为其默认值。轴标签和限制将自动生成和设置。D1=[5 3 9 1 2];%初始化数据点D2=[5 8 7 2 9];D3=[82 1 4 6];P=[D1;D2;D3];蜘蛛图(P);图例('D1','D2','D3','Location','southoutside');%示例2:手动设置轴限制。所有未指定的可选参数都设置为其默认值。轴的极限=[1,2,1,1,1;10,8,9,5,10];%轴限值[最小轴限值;最大轴限值]星形图(P、‘轴限值’、轴限值);%示例3:启用“填充”选项。填充透明度可以调整。轴_标签={'S1','S2','S3','S4','S5'};%轴属性轴间隔=2;填充选项='on';填充透明度=0.1;蜘蛛图(P、‘AxesLabels’、AxesLabels、‘AxesInterval’、AxesInterval、‘FillOption’、fill\u option、‘FillTransparency’、fill\u transparency);%示例4:最大参数数。轴_标签={'S1','S2','S3','S4','S5'};%轴属性轴间隔=4;轴_精度=‘无’;轴_极限=[1,2,1,1,1;10,8,9,5,10];填充选项='on';填充透明度=0.2;颜色=[1,0,0;0,1,0;0,0,1];线条样式='--';线宽=3;标记_类型='d';标记大小=10;字体大小=12;蜘蛛图(P、‘AxesLabels’、AxesLabels、‘AxesInterval’、AxesInterval、‘AxesPrecision’、AxesLimits、‘AxesLimits’、AxesLimits、‘FillOption’、fill\u option、‘FillTransparency’、fill\u transparency、‘Color’、‘LineStyle’、‘line\u style’、‘line\u style’、‘line\u width’、‘Marker’、‘Marker’、Marker\u type、‘Marker\U typee',字体大小);作者:Moses Yoo(jyoo在hatci.com)2019-10-16:次要修订添加名称-值对以自定义颜色、标记和线条设置。2019-10-08:另一个主要修订转换为名称-值对并添加颜色填充选项。2019-09-17:主要修订以提高速度、清晰度和功能特别感谢:特别感谢Gabriela Andrade&Andrテゥs Garcia的功能建议和错误修复建议。
  • 他包含了一个Live Script示例,展示了各种用例

  • 他非常积极地与用户进行交流评论也非常努力地更新条目。

我很高兴看到一段带有健壮错误检查功能的代码。他有大约100行代码用于检查函数的输入错误。他还为可选参数设置默认值。

下面是代码的输入参数处理/错误检查部分。

数据属性%%%%点属性[num_data_groups, num_data_points] = size(P);%可选参数个数numvarargs =长度(变长度输入宗量);%检查名称-值对参数是否为偶数如果mod(numvargs,2)==1错误('错误:请检查名称-值对参数');结束创建默认标签Axes_labels = cell(1, num_data_points);%遍历数据点的数量2 = 1: num_data_points%默认轴标签axes_labels {2} = sprintf (“标签%我”(二);结束%默认参数axes_interval = 3;axes_precision = 1;axes_limits = [];fill_option =“关闭”;fill_transparency = 0.2;颜色= [0,0.4470,0.7410;...0.8500、0.3250、0.0980;...0.9290、0.6940、0.1250;...0.4940、0.1840、0.5560;...0.4660、0.6740、0.1880;...0.3010、0.7450、0.9330;...0.6350, 0.0780, 0.1840);line_style =“- - -”;line_width = 2;marker_type =“o”;marker_size = 8;font_size = 10;检查是否指定了可选参数如果numvarargs > 1%初始化名称-值参数name_arguments =变长度输入宗量(1:2:结束);value_arguments =变长度输入宗量(2:2:结束);%遍历名称-值参数2 = 1:长度(name_arguments)%根据名称设置值参数开关低(name_arguments {2})情况下“axeslabels”axes_labels = value_arguments {2};情况下“AxeInterval”axes_interval = value_arguments {2};情况下“axesprecision”axes_precision = value_arguments {2};情况下“axeslimits”axes_limits = value_arguments {2};情况下“filloption”fill_option = value_arguments {2};情况下“filltransparency”fill_transparency = value_arguments {2};情况下“颜色”颜色= value_arguments {2};情况下“线型”line_style = value_arguments {2};情况下“线宽”line_width = value_arguments {2};情况下“标记”marker_type = value_arguments {2};情况下“markersize”marker_size = value_arguments {2};情况下“字形大小”font_size = value_arguments {2};否则错误(“错误:请输入有效的名称-值对。”);结束结束结束%%%错误检查%%%%检查轴标签是否为单元格如果iscell (axes_labels)%检查坐标轴标签是否与点数相同如果Length (axes_labels) ~= num_data_points error(错误:请确保标签的数量与分数的数量相同。);结束其他的%检查是否有效的字符串条目如果~ strcmp (axes_labels,“没有”)错误('错误:请输入有效标签或'无'删除标签。');结束结束检查坐标轴极限是否为空如果~ isempty (axes_limits)检查坐标轴的长度是否与点数相同如果Size (axes_limits, 1) ~= 2 || Size (axes_limits, 2) ~= num_data_points error(错误:请确保最小和最大轴限制匹配数据点的数量。);结束结束检查轴精度是否串如果~ ischar (axes_precision)%检查轴属性是否为整数如果Floor (axes_precision) ~= axes_interval ||“错误:请为轴属性输入一个整数。”);结束检查坐标轴属性是否为正如果轴间隔<1 | |轴精度<1误差(错误:请为坐标轴属性输入大于1的值。);结束其他的%检查轴精度是否为有效的字符串条目如果~ strcmp (axes_precision,“没有”)错误('错误:轴精度输入无效。请输入“无”以删除轴文本。);结束结束%检查是否没有一个有效的填充选项参数如果~ ismember (fill_option, {“关闭”“上”})错误(错误:填写选项请输入“关闭”或“打开”。);结束%检查填充透明度是否有效如果填充透明度<0 | |填充透明度>1错误(错误:请输入一个介于[0,1]之间的透明度值。);结束%检查字体大小是否大于零如果Font_size <= 0错误(错误:请输入大于零的字体。);结束

这可以转换成参数块。

参数P(:,:)双选项。AxesLabels{validateAxesLabels (options.AxesLabels, P)}= cellstr (“标签”+(1:尺寸(P, 2)))选项。AxesInterval(1,1)双{mustBeInteger}= 3选项。AxesPrecision{validateAxesPrecision (options.AxesPrecision)}= 1选项。AxesLimits双{validateAxesLimits (options.AxesLimits, P)}=[]选项。FillOptionchar {mustBeMember (options.FillOption{‘了’,‘’})}“关闭”选项。FillTransparency(1,1)双{mustBeGreaterThanOrEqual (options.FillTransparency, 0), mustBeLessThanOrEqual (options.FillTransparency, 1)}= 0.1选项。颜色(3):双{mustBeGreaterThanOrEqual (options.Color, 0), mustBeLessThanOrEqual (options.Color, 1)}=得到(大的,“defaultAxesColorOrder”)选项。线型char {mustBeMember (options.LineStyle ,{'-','--',':','-.',' 没有'})}“- - -”选项。线宽(1,1)双{mustBePositive}= 2选项。标记char {mustBeMember (options.Marker {' + ', ' o ','*','.',' x”、“广场”、“s”、“钻石”、“d”、“v ','^','>','<',' 五角星形”、“p”、“卦”、“h”、“没有”})}“o”选项。标记Size(1,1)双{mustBePositive}= 8选项。字形大小(1,1)双{mustBePositive}= 10结束

我还为一些参数创建了自定义验证函数。

函数validateAxesPrecision(x)如果isnumeric(x)验证属性(x{“双人”},{“标量”“整数”mfilename},“AxesPrecision”其他的如果~ isequal (x,“没有”)错误('AxesPrecision必须是一个标量整数或'none''结束结束结束函数validateAxesLimits (axLim P)如果~ isempty (axLim) validateattributes (axLim, {“双人”},{“大小”,大小(P, 2) [2]}, mfilename,“AxesLimits”结束结束函数validateAxesLabels(axLabels,P)如果~ isequal (axLabels“没有”) validateattributes (axLabels, {“细胞”},{“大小”,大小(P, 2) [1]}, mfilename,“AxesLabels”结束结束

这些更改将代码的行数从500行减少到400行。很整洁!

评论

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




与MATLAB®R2019b一起发布

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。