1 view (last 30 days)

Show older comments

Hi, I am having problems adding a pie chart that updates when the functions update. The goal is to have a figure filling out an area (an array, that is being transformed from ones to zeros), as well as a chart that, if possible, continuously updates, preferably with percentage. I would guess adding something like "pie((numel(x)/numel(x))*100)", where x is the amount of zeros? I am very new to Matlab so any tips would be much appreciated! Here is what I have so far:

x = 3.0;

y = 3.0;

theta = 20;

xt = cosd(theta);

grass = [0 0.7 0.2

0.4 0.6 0

0.4 0.2 0];

A = ones(30, 20);

A(:, 1) = 2; %B1 = A(:,1);

A(:,20) = 2; %B2 = A(:,20);

A(30,:) = 2; %B3 = A(30,:);

A(1,:) = 2; %B4 = A(1,:);

%A(2,2) = 0;

imagesc(A)

colormap(grass)

axis equal

while sum(A, 'all') > 192

if A(round(y),round(x)+2) == 2

xt = -cosd(theta);

elseif A(round(y),round(x)-2) == 2

xt = cosd(theta);

end

if A(round(y)+2,round(x)) == 2

theta = -abs(theta);

elseif A(round(y)-2,round(x)) == 2

theta = abs(theta);

end

x = x + xt;

y = y + sind(theta);

A(round(y),round(x+1)) = 0;

A(round(y),round(x-1)) = 0;

A(round(y+1),round(x)) = 0;

A(round(y-1),round(x)) = 0;

A(round(y+1),round(x-1)) = 0;

A(round(y+1),round(x+1)) = 0;

A(round(y-1),round(x-1)) = 0;

A(round(y-1),round(x+1)) = 0;

disp("x = "+x+" y = "+y)

imagesc(A)

axis equal

pause(0.0000001)

end

disp(x+" Done "+y)

Pavan Guntha
on 20 Oct 2021

Hello Aaron,

You could use pie command to plot a pie chart. In order to update it dynamically, you could include the pie chart functionality into the while loop in your code as follows:

figure(1)

imagesc(A)

colormap(grass)

axis equal

while sum(A, 'all') > 192

if A(round(y),round(x)+2) == 2

xt = -cosd(theta);

elseif A(round(y),round(x)-2) == 2

xt = cosd(theta);

end

if A(round(y)+2,round(x)) == 2

theta = -abs(theta);

elseif A(round(y)-2,round(x)) == 2

theta = abs(theta);

end

x = x + xt;

y = y + sind(theta);

A(round(y),round(x+1)) = 0;

A(round(y),round(x-1)) = 0;

A(round(y+1),round(x)) = 0;

A(round(y-1),round(x)) = 0;

A(round(y+1),round(x-1)) = 0;

A(round(y+1),round(x+1)) = 0;

A(round(y-1),round(x-1)) = 0;

A(round(y-1),round(x+1)) = 0;

disp("x = "+x+" y = "+y)

figure(1)

imagesc(A)

axis equal

% Pie Chart Plotting functionality

figure(2)

pie([sum(A==0, "all") sum(A~=0, "all")], '%.3f%%')

labels = {'Covered Region', 'Uncovered Region'};

legend(labels,"Location","northeast")

pause(0.0000001)

end

The result of the above code is as follows where the data presented in the Pie chart gets updated in every iteration:

Hope this helps!

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

Start Hunting!