boxplot from a structured array
4 ビュー (過去 30 日間)
古いコメントを表示
hi
i have a structured array it's like this
name_of_image(1).stats
name_of_image(2).stats
etc
in .stats is a whole load of variables, like stats.area
what is the simplest way of producing a box plot of e.g stats.area, while ensuring that the box plot is labeled correctly with the name_of_image
thanks
ps i tried a for loop to extract the information, but thought there must be a simpler way
x = [];
% nameArray = [] ;
for i = 1 : length(collated_data)
% nameArray(i) = collated_data(i).name;
for k = 1 : length(collated_data(i).stats)
x(i, k) = collated_data(i).stats(k).area;
if x(i, k) < 17
x(i, k) = NaN;
end
end
end
3 件のコメント
the cyclist
2017 年 7 月 13 日
FYI, in your code the variable is named "area", but in the file it is "Area". So, you might need to fix that up in my code.
採用された回答
the cyclist
2017 年 7 月 13 日
編集済み: the cyclist
2017 年 7 月 14 日
numberArrays = numel(collated_data);
areaAndGroup = [];
for na = 1:numberArrays
numberAreas = numel(collated_data(na).stats);
% This is the tricky part. I'm extracting the area data from the inner structure, munging them into a vector, and then including a second
% column that enumerates which structure they came from (to use as a grouping variable in the boxplot command).
areaAndGroup = [areaAndGroup; [collated_data(na).stats.Area]',repmat(na,[numberAreas,1])];
end
areaAndGroup(areaAndGroup(:,1)<17,:) = NaN;
figure boxplot(areaAndGroup(:,1),areaAndGroup(:,2))
3 件のコメント
the cyclist
2017 年 7 月 14 日
編集済み: the cyclist
2017 年 7 月 14 日
Well, you've got some awfully long names there. The main problem will be parsing those into something that will fit. Here is a not-very-robust attempt:
numberArrays = numel(collated_data);
areaAndGroup = [];
for na = 1:numberArrays
numberAreas = numel(collated_data(na).stats);
shortName{na} = collated_data(na).name(41:end-14);
% This is the tricky part. I'm extracting individual area, munging them into a vector, and then including a second
% column enumerated which structure they came from (to use as a grouping variable).
areaAndGroup = [areaAndGroup; [collated_data(na).stats.Area]',repmat(na,[numberAreas,1])];
end
areaAndGroup(areaAndGroup(:,1)<17,:) = NaN;
figure boxplot(areaAndGroup(:,1),areaAndGroup(:,2)) set(gca,'XTickLabel',shortName,'XTickLabelRotation',30)
You could do something smarter using regular expressions to identify the relevant part of the longer name.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!