多分类数据集的箱线图

246次浏览(过去30天)
我想为4个数据集收集的3个重复变量绘制Boxplots,其中每个数据集有15x3个值。我想在x轴上画出4个类别,每个类别有3个垂直箱线图。
有人能帮我一下吗?
我已附上带有名称特征的文件。
提前谢谢你。

接受的答案

克里斯·拉皮埃尔
克里斯·拉皮埃尔 2019年10月25日
编辑:克里斯·拉皮埃尔 2019年10月25日
你可以使用' BoxStyle','filled'名称,值对 创建箱线图时。我不喜欢那样。我所能找到的最好的方法就是 这篇文章 .请注意,填充是放置在盒状图顶部的彩色对象。这意味着它会掩盖中间线,除非你调整它的透明度。
我已经移动了平均值的绘图,使其位于创建填充的新对象的顶部。我还将它添加到图例中,以便其他人知道这个非标准标记代表什么。
最后的答案是:
负载“plot.mat的数据”
nDataSets = 7;
nVars = 3;
nVals = 15;
创建列向量来指示数据集
dataSet = categorical([ones(nVars*nVals,1);...
(据nvar *造船,1)* 2;...
(据nvar *造船,1)* 3;...
(据nvar *造船,1)* 4;...
(据nvar *造船,1)* 5;...
(据nvar *造船,1)* 6;...
(据nvar *造船,1)* 7]);
创建列向量来表示变量
清晰的var
var(1:造船,1)=“Var1”
var(+ 1:结束+造船,1)=“Var2”
var(+ 1:结束+造船,1)=“Var3”
Var =分类([Var; Var; Var; Var; Var]);
创建一个表
testData =表(数据,数据集,Var);
h = boxplot(testData.data,{testData.dataSet,testData.Var},...
“ColorGroup”, testData。Var,...
“标签”,{“Data1”“Data2”“Data3”“Data4”“Data5”“Data6”“Data7”});
% set(gca,'XTickLabel',{' '})
不显示异常值
Ol = findobj(h,“标签”“离群值”);
集(ol,“可见”“关闭”);
找到所有箱子
Box_vars = findall(h,“标签”“盒子”);
填充盒百分比
j = 1:长度(box_vars)
补丁(get (box_vars (j),“XData”),得到(box_vars (j),“YData”), box_vars (j)。的颜色,“FaceAlpha”、1。“EdgeColor”“没有”);
结束
%添加图例
Lg = legend(box_vars(1:3), {G1的“G2”“G3”},“位置”“northoutside”“定位”“水平”);
将Mean添加到箱线图中
summaryTbl = groupsummary(testData,{“数据集”“Var”},“的意思是”
持有
情节(summaryTbl.mean_data' + k '
持有
Lg。{4} =字符串“的意思是”
1评论
琼娜
琼娜 2019年10月25日
非常感谢。:)

登录评论。

更多答案(3)

克里斯·拉皮埃尔
克里斯·拉皮埃尔 2019年10月24日
编辑:克里斯·拉皮埃尔 2019年10月24日
不知道你希望它最终是什么样子,但有一种方法。
负载features.mat
Data1 = features{1};
Data2 = features{2};
Data3 = features{3};
Data4 = features{4};
次要情节(1,4,1)
箱线图(data1)
标题(“数据1”
次要情节(1,4,2)
箱线图(data2)
标题(《数据2》
次要情节(1,4,3)
箱线图(data3)
标题(的数据3 '
次要情节(1,4,4)
箱线图(data4)
标题('数据4 '
naina_features_4boxplot.png
1评论
克里斯·拉皮埃尔
克里斯·拉皮埃尔 2019年10月24日
编辑:克里斯·拉皮埃尔 2019年10月24日
一件可能很酷的事情是利用分组选项(中描述的第二种语法) 医生 ).要做到这一点,我建议将您的数据放到一个 表格 .用所有数据创建一个变量,一个用 分类 数据集的信息,以及变量的分类信息。
创建所有数据的列向量
数据= [data1(:);data2 (:);data3 (:);data4 (:));
创建列向量来指示数据集
dataSet = categorical([ones(number (data1),1);...
(元素个数(data2), 1) * 2;...
(元素个数(data3), 1) * 3;...
(元素个数(data4), 1) * 4]);
创建列向量来表示变量
清晰的var
var(1:长度(data1), 1) =“Var1”
var(端+ 1:端+长度(data1), 1) =“Var2”
var(端+ 1:端+长度(data1), 1) =“Var3”
Var =分类([Var; Var; Var]);
创建一个表
testData =表(数据,数据集,Var);
Naina_table.png
现在您可以使用一个boxplot命令来创建所描述的boxplot。您可以使用多个分组变量将数据组织到单独的箱线图中(用花括号将它们括起来)。在这里,我首先分组 数据集 ,则由 Var
箱线图(testData.data {testData.dataSet, testData.Var})
两个x轴标签表示1)数据集和2)变量。
如果您想要逐个查看特定变量的所有箱线图,请将分组变量的顺序更改为第一组by Var ,则由 数据集
箱线图(testData.data {testData.Var, testData.dataSet})
注意x轴标签仍然可以用来正确地识别每个箱线图。

登录评论。


琼娜
琼娜 2019年10月24日
嗨短剑,
非常感谢你的回复。第二个函数对我来说很好,但我还有一些指针,如果你能帮助我,我将非常感激。
1: Var1、var2或Var3如何用相同的配色方案上色?
2:是否可以添加Var 1、2和3的图例,而不是在x轴上显示?
3:我可以显示数据类型=1,2,3,4作为名义数据,只是一次,而不是为所有3个变量重复它。例如,在x轴上显示第一个Var1,Var2和Var3的“数据a1”。
4:这个图显示的是异常值,怎么能忽视它呢?
TIA。
5个评论
亚当Danz
亚当Danz 2021年5月22日
@ 琼娜 我可能会听从Chris的建议,在中使用分组选项 箱线图 但是文件交换中有几个函数提供了额外的分组方法。

登录评论。


哈德森·维埃拉·库蒂尼奥
嗨,朋友,来看看这个: //www.tatmou.com/help/matlab/ref/boxchart.html
这很简单!

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!