How to colour code polygons by area?

3 views (last 30 days)
Hi,
I have generated a Voronoi diagram and calculated the areas of the polygons formed. I now want to colour code my polygons by area, for example, for areas between 10-20, colour this red. Then 20-30 blue... etc. Ideally, I would like to have a continous colour fade from smallest-largest polygon area. Could someone please shed some light on how to do this. I have currently used the patch(x,y,c) function, but this does not colour by area. Thanks in advance.

Accepted Answer

Mike Garrity
Mike Garrity on 23 Oct 2015
It's actually pretty easy to do with the polyarea function.
Let's start with the Voronoi diagram with color example from the documentation. It shows using the index i as the color argument to patch. What we need to do is replace that with the area of the polygon. The polyarea function will compute that. It takes the same X & Y coordinates that patch wants. So it simply looks like this:
x = gallery('uniformdata',[10 2],5);
[v,c] = voronoin(x);
for i = 1:length(c)
if all(c{i}~=1)
x = v(c{i},1);
y = v(c{i},2);
a = polyarea(x,y);
patch(x,y,a);
end
end
Here's a more interesting example:
rng default
figure('Position',[100 100 500 600])
pts = randn(500,2);
[v,c] = voronoin(pts);
for i = 1:length(c)
if all(c{i}~=1)
x = v(c{i},1);
y = v(c{i},2);
a = polyarea(x,y);
patch(x,y,a);
end
end
hold on
scatter(pts(:,1),pts(:,2),40,[.9 .1 .1],'Marker','+','MarkerEdgeAlpha',.5)
colorbar('SouthOutside')
axis equal
xlim([-3 3])
ylim([-3 3])
caxis([0 2])

More Answers (1)

Image Analyst
Image Analyst on 22 Oct 2015
It's easy to do if you convert it to an image. Just call bwlabel(), regionprops(), sort(), and intlut(). Do you have the Image Processing Toolbox.

Community Treasure Hunt

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

Start Hunting!