subplot automatically fill in next position for selection of plots in for loop
30 views (last 30 days)
Show older comments
I have a state variable that ranges from 1:20 but I only want to plot 4:11 in a 2x4 grid.
I'm trying to use the subplot function, but I can't figure out how to make the plots show up in the position I want them to.
Essential what I have is
state = 4;
subplot(2,4,1)
for state = 5:11;
subplot(2,4,state)
end
but when I have the position for states 5:11 as "state" it offsets them as if those other states I'm not selecting were there, and I end up with this

is there a way to have the 5:11 plots just fill in the next position without having to write them out one at a time? I've tried [2:8] and that didn't work.
0 Comments
Accepted Answer
dpb
on 26 Nov 2025 at 21:22
Edited: dpb
on 26 Nov 2025 at 21:46
The subplots are sequentially numbered from 1:N as given in the construction. To use yours just
...
for state = 5:11
subpltIdx=state-4;
subplot(2,4,subpltIdx)
...
% plot stuff goes here...
end
...
tiledlayout(2,4)
...
for state = 5:11
nexttile
...
% plot stuff goes here...
end
While neither requires it, I would strongly recommend you save the handles to the axes in a 2D array on creation -- then one can access whichever axis is needed directly to make any later changes needed.
2 Comments
dpb
on 28 Nov 2025 at 14:56
Just a comment on the indexing...when have something of this sort with the subplot() construct where need the second counter, the alternate way besides the difference is something like
...
subpltIdx=0; % initialize a second counter
for state = 5:11
subpltIdx=subpltIdx+1; % increment the counter
...
This can be very effective in many situations to decouple the other counter from the loop index but keep in synch...
More Answers (1)
See Also
Categories
Find more on Subplots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!