Subplots in a for loop- find the mistake

1 回表示 (過去 30 日間)
Simon
Simon 2014 年 7 月 1 日
コメント済み: Geoff Hayes 2014 年 7 月 1 日
Dear all,
I want to create a plot with n subplots. The problem here is that all the subplots are the same (see picture), but they shouldn't as the data in the cell 'M' alters. I guess it is some mistake with 'hold off' (but I tried to put it nearly everywhere) or the looping of the cell, but can't find it.
figure
cl={'r','y','g'};
subplot(n+1,1,1),plot(P_est)
for m=2:n+1;
subplot(n+1,1,m);
hold off
for p=1:n;
for q=1:t;
xx=[q-1,q] ;
plot([ xx fliplr(xx) xx(1)],[0 0 1 1 0],cl{M{1,p}(q)+1},'linewidth',12)
hold on
end
end
end
Thanks!

採用された回答

Geoff Hayes
Geoff Hayes 2014 年 7 月 1 日
I don't think that the hold off is the problem, and it can probably be removed due to the hold on that follows.
The outer loop, for m=2:n+1; updates each of the six (colourful!) subplots that follow the initial subplot. But aside from
subplot(n+1,1,m);
nothing else in that loop relies upon m. So in the block of code
for p=1:n;
for q=1:t;
xx=[q-1,q] ;
plot([ xx fliplr(xx) xx(1)],[0 0 1 1 0],cl{M{1,p}(q)+1},'linewidth',12)
hold on
end
end
there is no dependence upon m, and so each subplot will be drawn identically. It may be that the cell array M should include the m parameter (somehow).
  2 件のコメント
Simon
Simon 2014 年 7 月 1 日
To say it with Christoph Waltz: That's a BINGO ;)
Thanks! I changed the code to
for m=2:n+1;
subplot(n+1,1,m);
for q=1:t;
xx=[q-1,q] ;
plot([ xx fliplr(xx) xx(1)],[0 0 1 1 0],cl{M{1,m-1}(q)+1},'linewidth',12)
hold on
end
hold off
end
And now it works! By chance, do you know how I change the size of the subplots so the seven bars are smaller than the first plot?
Geoff Hayes
Geoff Hayes 2014 年 7 月 1 日
Awesome!
As for resizing the seven bars to be smaller than the first plot, you could try the following. Grab the position of the subplot (using its handle). The position will be a 4 element vector with [x y width height] components. Reduce the element that corresponds to height, and reset the position:
h = subplot(n+1,1,m); % get the handle to the subplot
plotDims = get(h,'Position'); % get the subplot dimensions
plotDims(4) = plotDims(4)/5; % shrink the height by a factor of 5
set(h,'Position', plotDims); % reset
Try doing this before you do the plotting, but if that doesn't work, then just do it once you've iterated over p.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSubplots についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by