ahm5028
ahm5028

Reputation: 11

How do I create a polar plot with concentric colored rings corresponding to single values in Matlab?

I am trying to create a plot that looks like this with rings of constant values (colors) extending from 0 to 100 in 10 unit increments.

Rings of single values extending outward from center

However, my code is not producing this, and I do not know where it has gone wrong.

   % values representing the colors that each ring should be 
   % starting from the center and moving outwards in 10 unit increments.

   values = [364,358,354,348,339,335,330,325,320,310];

   xCoord = linspace(0,2*pi,10);
   yCoord = linspace(0,100,10);
   [TH,R] = meshgrid(xCoord,yCoord);
   [X,Y] = pol2cart(TH,R);
   [Z] = meshgrid(values);
   contour_ticks = 300:5:375;
   figure
   hold on
   contourf(X,Y,Z,contour_ticks);
   a=gca; cb=colorbar; colormap('jet'); caxis([300 375]);

This produces a plot resembling this:

Incorrect plot

Any ideas what I'm doing wrong? Any help is greatly appreciated. Thanks.

Upvotes: 1

Views: 946

Answers (1)

Luis Mendo
Luis Mendo

Reputation: 112769

If you just want to plot circles, you can use the following approach:

radii = 100:-10:10; %// descending order, so that bigger circles don't cover small ones
colors = parula(numel(radii)); %// or use some other colormap
for n = 1:numel(radii)
    r = radii(n);
    rectangle('Position', [-r -r 2*r 2*r], 'Curvature', [1 1], 'FaceColor', colors(n,:),...
       'EdgeColor', 'none') %// plot each circle using sequential colors, no edge
    hold on
end
axis equal
axis([-1 1 -1 1]*max(radii))

enter image description here

Upvotes: 2

Related Questions