效果图:1、train和test样本数据数量不一样;2、上下端横线去掉,中心线变为实线;3、分组修改颜色;4、指定每个箱子、每个组的位置
网上介绍 boxplot的文章已经很多了,自己试了一天总结出来的一些偏门的应用方法。直接上代码。
Deepsurv_train=[0.93 0.94 0.82 0.87 0.97 0.98 0.88 0.98 0.88 0.87 ];
Deepsurv_test=[0.65 0.52 0.57 0.52 0.59 0.62 0.53 0.53 0.57 0.65 0.57 ];
Random_Survival_Forest_train=[0.95 0.84 0.84 0.84 0.93 0.94 0.95 0.84 0.95 ];
Random_Survival_test=[0.58 0.56 0.55 0.51 0.55 0.56 0.59 0.56 0.59 0.56 0.66 ];
S_SAE_train=[0.93 0.94 0.74 0.93 0.82 0.93 0.84 0.94 0.84 0.84 ];
S_SAE_test=[0.69 0.59 0.69 0.59 0.62 0.66 0.49 0.62 0.61 0.60 0.61 ];
median1=median(Deepsurv_train);
median2=median(Deepsurv_test);
median3=median(Random_Survival_Forest_train);
median4=median(Random_Survival_test);
median5=median(S_SAE_train);
median6=median(S_SAE_test);
Pre = [Deepsurv_train,Deepsurv_test,Random_Survival_Forest_train,Random_Survival_test,S_SAE_train,S_SAE_test];
Pre_tmp=[ones(size(Deepsurv_train)),2*ones(size(Deepsurv_test)),3*ones(size(Random_Survival_Forest_train)),4*ones(size(Random_Survival_test))...
,5*ones(size(S_SAE_train)),6*ones(size(S_SAE_test))];
figure()
positions1=[ones(size(Deepsurv_train)),1.25*ones(size(Deepsurv_test)),2*ones(size(Random_Survival_Forest_train)),2.25*ones(size(Random_Survival_test))...
,3*ones(size(S_SAE_train)),3.25*ones(size(S_SAE_test))];
boxplot(Pre,Pre_tmp,'color','k','widths',0.25,sym = '.',positions=positions1);
set(gca,'xtick',[1.12 2.12 3.12])
set(gca,'ytick',[0.5:0.1:1])
set(gca,'xticklabel',{'Deepsurv','Random_Survival_Forest','S_SAE'})
grid on
color = ['r', 'b', 'r', 'b','r', 'b'];
boxobj = findobj(gca,'Tag','Box');
h = findobj(gca,'Tag','Box');
LW = findobj(gca,'Tag','Lower Whisker');
UW = findobj(gca,'Tag','Upper Whisker');
Uav = findobj(gca,'Tag','Upper Adjacent Value');
Lav = findobj(gca,'Tag','Lower Adjacent Value');
M = findobj(gca,'Tag','Median');
for j=1:length(h)
LW(j).LineStyle='-';
UW(j).LineStyle='-';
Uav(j).LineStyle='none';
Lav(j).LineStyle='none';
M(j).Color='k';
patch(get(h(j),'XData'),get(h(j),'YData'),color(j),'FaceAlpha',.6);
end
legend('','train','test');
ax = gca;
ax.GridColor = [0 0 0];
text(1.14,median1,num2str(median1))
text(1.4,median2,num2str(median2))
text(2.14,median3,num2str(median3))
text(2.4,median4,num2str(median4))
text(3.14,median5,num2str(median5))
text(3.4,median6,num2str(median6))
xlim([0.8 3.6])
xlabel('model','FontSize',13)
ylabel('cindex','FontSize',13)
处理数据长度不一样的方法:构造分组。例如A集有3个量,B集有2个量,则构造[1,1,1,2,2],再对[A,B]和分组,依据每一列画箱线图,由于A集组号都是1所以他们是1组。
修改线型的方法:findobj(gca,‘tag’,想要的组件的句柄)
句柄在帮助文档找,例如Lower Whisker就是箱线图的下须线
得到的变量是line类型,就可以更改线宽、线型(虚实线)、颜色等等
如果对您有帮助的话就留个赞吧!