1

我有这个 matlab 文件,其中有一个名为“数据”的字段。在“数据”中,我有很多不同债券的字段(x5Q12 ...等)。 在此处输入图像描述

我正在尝试生成一个包含每个字段的一列的箱形图(即其中包含 36 个框的箱形图)。我尝试了这段代码(例如,为所有债券中的第 2 列绘制一个框),但它对我不起作用:

boxplot(gilts_withoutdates.data.:(:,2));figure(gcf);

我知道我对调用结构中不同级别的理解在这里是一个问题。请问有什么建议吗?非常感谢。

4

2 回答 2

2

您可以使用STRUCTFUN从结构的所有字段的特定列中提取数据。

col2plot = 2; %# this is the column you want to plot

%# return, for each field in the structure, the specified
%# column in a cell array
data2plot = structfun(@(x){x(:,col2plot)},gilts_withoutdates.data);

%# convert the cell array into a vector plus group indices
groupIdx = arrayfun(@(x)x*ones(size(data2plot{x})),1:length(data2plot),'uni',0);
groupIdx = cat(1,groupIdx{:});
data2plot = cat(1,data2plot{:});

%# create a compact boxplot
boxplot(data2plot,groupIdx,'plotStyle','compact','labels',labels)

如果您对数据的分布感兴趣,我可以推荐我的函数distributionPlot

于 2012-08-12T04:18:41.983 回答
0
B=gilts_withoutdates.data;
b=fieldnames(B);
for a=1:numel(b)
  boxplot(B.(b{a})); fig;
end

要为每个字段的 5 列数据中的每一列绘制箱线图,您可以这样做:

   pos=1;
   for i = 1:numel(b)
    for ii=1:5
       subplot(numel(b),5,pos);boxplot(B.(b{i})(:,ii));pos=pos+1;
    end
   end
于 2012-08-11T19:08:36.697 回答