Display sum of areas of different categories for multiple polygons in a legend

4 次查看(过去 30 天)
I have drawn multiple polygons representing different view-out categories, and have calculated the area of each individual polygon. Now i want to display the sum of the areas for each category. I have 7 categories (Other, Sky, Building, Traffic, Car, Ground and Greenery) but many of the polygons belongs to the same category (Building, Car and Greenery).
Is there a way to easily show the sum of the areas for each category in a legend on the plot? If I run the code now, it will just give me the area for each polygon instead of the area for the category, see image below.
figure;
imagesc([-pi, pi], [-1, 1], bg_img);
V = readtable('polygons_brogade_foraar.csv');
V = table2array(V);
hold on;
polygons = {
'Other', [-pi 1; -pi -1; pi -1; pi 1], 'white';
'Sky', [V(:,1) V(:,2)], '#4DBEEE';
'Building 1', [V(:,3) V(:,4)], '#A2142F';
'Building 2', [V(:,5) V(:,6)], '#A2142F';
'Traffic', [V(:,7) V(:,8)], '#0072BD';
'Car 1', [V(:,9) V(:,10)], '#EDB120';
'Car 2', [V(:,11) V(:,12)], '#EDB120';
'Car 3', [V(:,13) V(:,14)], '#EDB120';
'Ground', [V(:,15) V(:,16)], '#D95319';
'Greenery 1', [V(:,17) V(:,18)], '#77AC30';
'Greenery 2', [V(:,19) V(:,20)], '#77AC30';
'Greenery 3', [V(:,21) V(:,22)], '#77AC30';
'Greenery 4', [V(:,23) V(:,24)], '#77AC30';
'Greenery 5', [V(:,25) V(:,26)], '#77AC30';
};
Q = polyshape(zeros(0,2));
n = size(polygons, 1);
A = zeros(1, n);
P = cell(1, n);
for k = n:-1:1
Pk = polyshape(polygons{k, 2});
A(k) = area(subtract(Pk, Q));
P{k} = Pk;
Q = union(Q, Pk);
end
for k = 1:n
plot(P{k}, 'FaceAlpha', 1, 'FaceColor', polygons{k, 3});
end
for k = 1:n
fprintf('Addition area polygon %d = %.2f\n', k, A(k));
end
legendStrings = cell(n, 1);
for k = 1:n
legendStrings{k} = sprintf('%s (Area: %.2f)', polygons{k, 1}, A(k));
end
legend(legendStrings, 'Location', 'best');
axis([-pi, pi, -1, 1]);
xticks(-pi:pi/2:pi);
xticklabels({'-\pi', '-\pi/2', '0', '\pi/2', '\pi'});
title('Region of Interests (ROIs) of the 360° Video');
xlabel('Longitude');
ylabel('Latitude');
ax = gca;
set(ax, 'FontSize', 15, 'FontName', 'Bookman Old Style');
Hope I explained it well enough.
Thank you in advance,
Louis H

采纳的回答

Voss
Voss 2023-8-6
编辑:Voss 2023-8-6
figure;
% imagesc([-pi, pi], [-1, 1], bg_img);
% since I don't have your variable bg_img, I set YDir 'reverse' like imagesc does
set(gca(),'YDir','reverse')
V = readtable('polygons_brogade_foraar.csv');
V = table2array(V);
hold on;
polygons = {
'Other', [-pi 1; -pi -1; pi -1; pi 1], 'white';
'Sky', V(:,[1 2]), '#4DBEEE';
'Building 1', V(:,[3 4]), '#A2142F';
'Building 2', V(:,[5 6]), '#A2142F';
'Traffic', V(:,[7 8]), '#0072BD';
'Car 1', V(:,[9 10]), '#EDB120';
'Car 2', V(:,[11 12]), '#EDB120';
'Car 3', V(:,[13 14]), '#EDB120';
'Ground', V(:,[15 16]), '#D95319';
'Greenery 1', V(:,[17 18]), '#77AC30';
'Greenery 2', V(:,[19 20]), '#77AC30';
'Greenery 3', V(:,[21 22]), '#77AC30';
'Greenery 4', V(:,[23 24]), '#77AC30';
'Greenery 5', V(:,[25 26]), '#77AC30';
};
Q = polyshape(zeros(0,2));
n = size(polygons, 1);
A = zeros(1, n);
P = cell(1, n);
for k = n:-1:1
Pk = polyshape(polygons{k, 2});
A(k) = area(subtract(Pk, Q));
P{k} = Pk;
Q = union(Q, Pk);
end
Warning: Boundaries with fewer than 3 points were removed.
Warning: Polyshape has duplicate vertices, intersections, or other inconsistencies that may produce inaccurate or unexpected results. Input data has been modified to create a well-defined polyshape.
Warning: Boundaries with fewer than 3 points were removed.
Warning: Boundaries with fewer than 3 points were removed.
Warning: Boundaries with fewer than 3 points were removed.
Warning: Boundaries with fewer than 3 points were removed.
Warning: Polyshape has duplicate vertices, intersections, or other inconsistencies that may produce inaccurate or unexpected results. Input data has been modified to create a well-defined polyshape.
Warning: Boundaries with fewer than 3 points were removed.
Warning: Polyshape has duplicate vertices, intersections, or other inconsistencies that may produce inaccurate or unexpected results. Input data has been modified to create a well-defined polyshape.
Warning: Boundaries with fewer than 3 points were removed.
Warning: Boundaries with fewer than 3 points were removed.
Warning: Boundaries with fewer than 3 points were removed.
Warning: Boundaries with fewer than 3 points were removed.
Warning: Boundaries with fewer than 3 points were removed.
Warning: Polyshape has duplicate vertices, intersections, or other inconsistencies that may produce inaccurate or unexpected results. Input data has been modified to create a well-defined polyshape.
Warning: Polyshape has duplicate vertices, intersections, or other inconsistencies that may produce inaccurate or unexpected results. Input data has been modified to create a well-defined polyshape.
Warning: Boundaries with fewer than 3 points were removed.
[category_names, h_plot_idx, category_idx] = unique( regexprep( polygons(:,1), ' \d+$', ''), 'stable');
category_sums = splitapply(@sum, A(:), category_idx);
h_plot = zeros(1,n);
for k = 1:n
h_plot(k) = plot(P{k}, 'FaceAlpha', 1, 'FaceColor', polygons{k, 3});
end
for k = 1:n
fprintf('Addition area polygon %d = %.2f\n', k, A(k));
end
Addition area polygon 1 = 0.04 Addition area polygon 2 = 4.58 Addition area polygon 3 = 0.77 Addition area polygon 4 = 0.58 Addition area polygon 5 = 0.05 Addition area polygon 6 = 0.00 Addition area polygon 7 = 0.01 Addition area polygon 8 = 0.01 Addition area polygon 9 = 5.97 Addition area polygon 10 = 0.07 Addition area polygon 11 = 0.14 Addition area polygon 12 = 0.15 Addition area polygon 13 = 0.17 Addition area polygon 14 = 0.02
m = numel(category_names);
legendStrings = cell(m, 1);
for k = 1:m
legendStrings{k} = sprintf('%s (Area: %.2f)', category_names{k}, category_sums(k));
end
legend(h_plot(h_plot_idx), legendStrings, 'Location', 'best');
axis([-pi, pi, -1, 1]);
xticks(-pi:pi/2:pi);
xticklabels({'-\pi', '-\pi/2', '0', '\pi/2', '\pi'});
title('Region of Interests (ROIs) of the 360° Video');
xlabel('Longitude');
ylabel('Latitude');
ax = gca;
set(ax, 'FontSize', 15, 'FontName', 'Bookman Old Style');

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Lighting, Transparency, and Shading 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by