How to Subplot in a for loop

14 Ansichten (letzte 30 Tage)
Patrick Keaveney
Patrick Keaveney am 3 Apr. 2020
I need help with making a subplot for the two histograms this code creates
%% Setting Initial Conditions
clc %Clearing the command window.
clear all %Making output nicer.
%0 is a step to the left and 1 is a step to the right.
Left = 0; %Setting the initial left value.
Right = 0; %Setting the initial right value.
%% Creating the Ensemble of Random Walkers
for N = [25000, 100000] %Creating a vector for all the ensemble sizes.
for x = 1:N %Creating an ensemble of N walkers.
for i = 2:2501 %Setting the for loop to run 2500 times.
Walker = -1 + rand(1)*(2); %Setting the walker to be a random number between -1 or 1.
if Walker > 0 %Saying if the walker takes a step to the right.
Left(i) = Left(i-1); %Left number of steps stays the same.
Right(i) = Right(i-1) + Walker; %Right number of steps goes up by walker value.
elseif Walker < 0 %Saying if the walker takes a step to the left.
Left(i) = Left(i-1) + Walker; %Left number of steps goes up by walker value.
Right(i) = Right(i-1); %Right number of steps stay the same.
end %Ending the if statement.
end %Ending the for loop.
location = Right(end) - abs(Left(end)); %Making the location the right number of steps minus the left.
Finallocation(x) = location; %Setting the location to be the end values of the walkers.
end %Ending the for loop.
%% Plotting the Results
figure('Name','Ensemble Histogram') %Labeling the figure appropriately.
histogram(Finallocation,20) %Making a histogram of the final locations.
z1 = sprintf('Ensemble of step size = %d',N); %Making a title that updates as variables are changed.
title(z1) %Making z1 the title.
xlabel('Final Location') %Labeling the x-axis appropriately.
ylabel('Number of Walkers') %Labeling the y-axis appropriately.
end %Ending the for loop.
  2 Kommentare
Image Analyst
Image Analyst am 4 Apr. 2020
You have 3 nested for loops. What do you want to plot, and where?
Patrick Keaveney
Patrick Keaveney am 4 Apr. 2020
I want to do a subplot for the two histograms of "Finallcation". I would prefer to plot them outside the for loops if possible.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Sriram Tadavarty
Sriram Tadavarty am 4 Apr. 2020
Hi Patrick,
You can the following modifications to the code:
1) To plot it inline the for loops, you can use the count temporary variable, bring the figure command before the for loop, as code below (%%% annotated for the comments placed) :
%% Setting Initial Conditions
clc %Clearing the command window.
clear all %Making output nicer.
%0 is a step to the left and 1 is a step to the right.
Left = 0; %Setting the initial left value.
Right = 0; %Setting the initial right value.
count = 1; %%% Initialized count
figure('Name','Ensemble Histogram') %Labeling the figure appropriately. %%% Brought it before for loop
%% Creating the Ensemble of Random Walkers
for N = [25000, 100000] %Creating a vector for all the ensemble sizes.
for x = 1:N %Creating an ensemble of N walkers.
for i = 2:2501 %Setting the for loop to run 2500 times.
Walker = -1 + rand(1)*(2); %Setting the walker to be a random number between -1 or 1.
if Walker > 0 %Saying if the walker takes a step to the right.
Left(i) = Left(i-1); %Left number of steps stays the same.
Right(i) = Right(i-1) + Walker; %Right number of steps goes up by walker value.
elseif Walker < 0 %Saying if the walker takes a step to the left.
Left(i) = Left(i-1) + Walker; %Left number of steps goes up by walker value.
Right(i) = Right(i-1); %Right number of steps stay the same.
end %Ending the if statement.
end %Ending the for loop.
location = Right(end) - abs(Left(end)); %Making the location the right number of steps minus the left.
Finallocation(x) = location; %Setting the location to be the end values of the walkers.
end %Ending the for loop.;
%% Plotting the Results
subplot(2,1,count) %%% Subplot calling
histogram(Finallocation,20) %Making a histogram of the final locations.
z1 = sprintf('Ensemble of step size = %d',N); %Making a title that updates as variables are changed.
title(z1) %Making z1 the title.
xlabel('Final Location') %Labeling the x-axis appropriately.
ylabel('Number of Walkers') %Labeling the y-axis appropriately.
count = count+1; %%% count variable update
end %Ending the for loop.
2) To plot outside the for loops, here you need to split up and write the code twice as placed below:
%% Setting Initial Conditions
clc %Clearing the command window.
clear all %Making output nicer.
%0 is a step to the left and 1 is a step to the right.
Left = 0; %Setting the initial left value.
Right = 0; %Setting the initial right value.
count = 1;
NVal =[25000, 100000];
%% Creating the Ensemble of Random Walkers
for N = [25000, 100000] %Creating a vector for all the ensemble sizes.
for x = 1:N %Creating an ensemble of N walkers.
for i = 2:2501 %Setting the for loop to run 2500 times.
Walker = -1 + rand(1)*(2); %Setting the walker to be a random number between -1 or 1.
if Walker > 0 %Saying if the walker takes a step to the right.
Left(i) = Left(i-1); %Left number of steps stays the same.
Right(i) = Right(i-1) + Walker; %Right number of steps goes up by walker value.
elseif Walker < 0 %Saying if the walker takes a step to the left.
Left(i) = Left(i-1) + Walker; %Left number of steps goes up by walker value.
Right(i) = Right(i-1); %Right number of steps stay the same.
end %Ending the if statement.
end %Ending the for loop.
location = Right(end) - abs(Left(end)); %Making the location the right number of steps minus the left.
Finallocation{count}(x) = location; %Setting the location to be the end values of the walkers.
end %Ending the for loop.;
%% Plotting the Results
count = count+1;
end %Ending the for loop.
figure('Name','Ensemble Histogram') %Labeling the figure appropriately.
subplot(2,1,1)
histogram(Finallocation{1},20) %Making a histogram of the final locations.
z1 = sprintf('Ensemble of step size = %d',NVal(1)); %Making a title that updates as variables are changed.
title(z1) %Making z1 the title.
xlabel('Final Location') %Labeling the x-axis appropriately.
ylabel('Number of Walkers') %Labeling the y-axis appropriately.
subplot(2,1,2)
histogram(Finallocation{2},20) %Making a histogram of the final locations.
z1 = sprintf('Ensemble of step size = %d',NVal(2)); %Making a title that updates as variables are changed.
title(z1) %Making z1 the title.
xlabel('Final Location') %Labeling the x-axis appropriately.
ylabel('Number of Walkers') %Labeling the y-axis appropriately.
If the values of N are more to use, i suggest the first method itself, to make the plot inline the for. Just update the values in subplot accordingly.
Hope this helps.
Regards,
Sriram

Weitere Antworten (0)

Kategorien

Mehr zu Data Distribution Plots finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by