boxplot from a structured array
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
cgenes
el 13 de Jul. de 2017
Comentada: cgenes
el 14 de Jul. de 2017
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 comentarios
the cyclist
el 13 de Jul. de 2017
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.
Respuesta aceptada
the cyclist
el 13 de Jul. de 2017
Editada: the cyclist
el 14 de Jul. de 2017
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 comentarios
the cyclist
el 14 de Jul. de 2017
Editada: the cyclist
el 14 de Jul. de 2017
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.
Más respuestas (0)
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!