9

我有 3 个向量Y=rand(1000,1)X=Y-rand(1000,1)ACTid=randi(6,1000,1)。我想按 Y 和 X 组创建箱线图,对应于它们的组值 1:6(来自 ACTid)。

这是相当临时的,看起来很讨厌

for ii=
dummyY(ii)={Y(ACTid==ii)};
dummyX(ii)={X(ACTid==ii)}
end

现在我有一个单元格中的数据,但不知道如何将它分组到箱线图中。有什么想法吗?

我找到了看起来像这样的aboxplot 函数,但我不想要那个,我想要内置的 boxplot 函数,因为我正在将它转换为 matlab2tikz 而这个做得不好。

在此处输入图像描述

编辑

感谢奥列格:我们现在有一个分组箱线图……但标签都是歪斜的。

xylabel = repmat({'Bleh','Blah'},1000,1); % need a legend instead, but doesn't appear possible
boxplot([Y(:,end); cfu], {repmat(ACTid,2,1), xylabel(:)} ,'factorgap',10,'color','rk')
set(gca,'xtick',1.5:3.2:50)
set(gca,'xticklabel',{'Direct care','Housekeeping','Mealtimes','Medication','Miscellaneous','Personal care'})
>> ylabel('Raw CFU counts (Y)')

在此处输入图像描述

如何添加图例?

4

2 回答 2

10

我在箱形图中对数据进行分组时遇到了同样的问题。我的另一个限制是不同的组有不同数量的数据点。根据我找到的教程,这似乎是我想与您分享的一个不错的解决方案:

x = [1,2,3,4,5,1,2,3,4,6];
group = [1,1,2,2,2,3,3,3,4,4];
positions = [1 1.25 2 2.25];
boxplot(x,group, 'positions', positions);

set(gca,'xtick',[mean(positions(1:2)) mean(positions(3:4)) ])
set(gca,'xticklabel',{'Direct care','Housekeeping'})

color = ['c', 'y', 'c', 'y'];
h = findobj(gca,'Tag','Box');
for j=1:length(h)
   patch(get(h(j),'XData'),get(h(j),'YData'),color(j),'FaceAlpha',.5);
end

c = get(gca, 'Children');

hleg1 = legend(c(1:2), 'Feature1', 'Feature2' );

具有不同组大小的彩色分组箱线图

是教程的链接。

于 2014-04-01T07:44:50.043 回答
9

两行方法(尽管如果您想保留两行 xlables 并将其居中在第一行,这将是 hackish):

Y     = rand(1000,1);
X     = Y-rand(1000,1);
ACTid = randi(6,1000,1);

xylabel = repmat('xy',1000,1);
boxplot([X; Y], {repmat(ACTid,2,1), xylabel(:)} ,'factorgap',10)

结果:

在此处输入图像描述

编辑

将标签居中...

% Retrieve handles to text labels
h = allchild(findall(gca,'type','hggroup'));

% Delete x, y labels
throw = findobj(h,'string','x','-or','string','y');
h     = setdiff(h,throw);
delete(throw);

% Center labels
mylbl  = {'this','is','a','pain','in...','guess!'};
hlbl   = findall(h,'type','text');
pos    = cell2mat(get(hlbl,'pos'));

% New centered position for first intra-group label
newPos = num2cell([mean(reshape(pos(:,1),2,[]))' pos(1:2:end,2:end)],2);
set(hlbl(1:2:end),{'pos'},newPos,{'string'},mylbl')

% delete second intra-group label
delete(hlbl(2:2:end))

导出为 .png 会导致问题...

于 2013-04-12T14:32:43.517 回答