gabboshow
gabboshow

Reputation: 5579

Exchange subplots in figure

I create a figure containing 4 subplots like:

y = [2 2 3; 2 5 6; 2 8 9; 2 11 12];
fig = figure
for i = 1 : 4
    h(i) = subplot(1,4,i)
    bar(y)
end

Now I would like to exchange the order of the subplots. For example the first subplot should go in the last column (4th) and the 2nd subplot should exchange with the 3rd.

Is it doable without generating again the figure?

Upvotes: 4

Views: 319

Answers (3)

sco1
sco1

Reputation: 12214

In addition to swapping the Position property of the axes objects, you could also swap the Parent property of the bar objects. This has the advantage of leaving your axes positioning intact.

A simple example:

function testcode

y1 = [2 2 3; 2 5 6; 2 8 9; 2 11 12];
y2 = -y1;

h(1) = subplot(1, 2, 1);
b(1,:) = bar(y1);
h(2) = subplot(1, 2, 2);
b(2,:) = bar(y2);

swapbar(h, b, [1,2]);
end

function swapbar(axesobjects, barobjects, axesswap)
    set(barobjects(axesswap(1), :), 'Parent', axesobjects(axesswap(2)));
    set(barobjects(axesswap(2), :), 'Parent', axesobjects(axesswap(1)));
end

Here I've created a small helper function swapbar to swap two axes. This isn't at all a robust implementation but it works well to illustrate the concept.

Old:

old

New:

yay

Upvotes: 0

MinF
MinF

Reputation: 326

Perhaps you could change their 'position' of the axes h. For instance:

% get position
pos = get(h,'position');
% change position, 1st <-> 4th, 2nd <->3rd.
set(h(1),'position',pos{4});
set(h(4),'position',pos{1});
set(h(2),'position',pos{3});
set(h(3),'position',pos{2});

Upvotes: 5

Wauzl
Wauzl

Reputation: 971

There is a possibility which kind of regenerates the figure. You can go to the plot tools, right click the figure and select "Show code". This will open a new file with a function that recreates the figure. There you can change your subplot-position and call the function in order to obtain the figure with switched subplots.

While this recreates the figure, you do not have to re-evaluate the function or script that originally created the figure.

PS: I'm not sure how new this feature is.

Upvotes: 2

Related Questions