How to change the subplot positioning in an existing figure? (2024)

91 views (last 30 days)

Show older comments

Lenwo on 25 Jun 2017

  • Link

    Direct link to this question

    https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure

  • Link

    Direct link to this question

    https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure

Edited: dpb on 26 Jun 2017

Accepted Answer: Jan

Open in MATLAB Online

Dear experts,

a while ago I created a figure with two subplots in the configuration subplot(1,2,x) (one row, two columns). I saved the figure as 'fig' file for later use. Now I would prefer the plots to be in subplot(2,1) (two rows, one column) configuration. I only have the .fig file and have no access to the relevant data to replot the figure.

Is there a way the accomplish this?

I opened the figure and tried the following:

hF = gcf;

hSub11 = subplot(1,2,1);

hSub12 = subplot(1,2,2);

nF = figure;

hSub21 = subplot(2,1,1);

copyobj(allchild(hSub11),hSub21)

hSub22 = subplot(2,1,2);

copyobj(allchild(hSub12),hSub22)

But besides the legends, titles and axis labels are missing, the plots show white spaces on top and bottom or left and right of the figure, especially when being resized.

Does anyone have an advice or an overall better solution for me?

Thank you very much! (I am using MATLAB 2014b)

3 Comments

Show 1 older commentHide 1 older comment

dpb on 25 Jun 2017

Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464315

  • Link

    Direct link to this comment

    https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464315

You can try the 'legacy' option to see if it helps but I'm guessing probably won't be fully satisfactory, either...there's just too much "behind the scenes" stuff going on...

Don't show us what the plots are, but I'm guessing the only real way will be to retrieve the data from the existing plots and recreate them.

Lenwo on 25 Jun 2017

  • Link

    Direct link to this comment

    https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464337

Thanks for your reply! That's an good idea, I will try this. I hope things won't get more complicated since I am using contour plots.

dpb on 25 Jun 2017

Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464346

  • Link

    Direct link to this comment

    https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464346

Can you build a sample that duplicates this that can post that folks can play with easily?

I've not tried Jan's idea; I can see why it didn't do what you expected exactly as is, but it may be able to be made to do so...I'll poke around little and try something.

Sign in to comment.

Sign in to answer this question.

Accepted Answer

Jan on 25 Jun 2017

  • Link

    Direct link to this answer

    https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#answer_271906

  • Link

    Direct link to this answer

    https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#answer_271906

Edited: Jan on 25 Jun 2017

Open in MATLAB Online

This swaps the positions of the two axes:

hFig = gcf;

hAxes = findobj(allchild(hFig), 'flat', 'Type', 'axes');

axesPos = get(hAxes, 'Position');

set(hAxes(1), 'Position', axesPos{2});

set(hAxes(2), 'Position', axesPos{1});

[EDITED] Thismove the first axes to the subplot(2,1,1) position, the 2nd to (2,1,2):

hFig = gcf;

hAxes = findobj(allchild(hFig), 'flat', 'Type', 'axes');

hSub = subplot(2,1,1);

set(hAxes(1), 'Position', get(hSub, 'Position'));

delete(hSub);

hSub = subplot(2,1,2);

set(hAxes(2), 'Position', get(hSub, 'Position'));

delete(hSub);

Please try it and explain, how the legends, white spaces etc. are effects.

Did you try to use the property editor? Open the figure, activate the toolbar, click on the arrow and move the objects around or resize with the mouse.

5 Comments

Show 3 older commentsHide 3 older comments

Lenwo on 25 Jun 2017

Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464336

  • Link

    Direct link to this comment

    https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464336

Thanks for your reply! But this Code does only switch the plots, but they remain in two columns, one row.

Jan on 25 Jun 2017

Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464350

  • Link

    Direct link to this comment

    https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464350

Edited: dpb on 26 Jun 2017

Sorry, I misunderstood the question. See EDITED.

dpb on 26 Jun 2017

Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464359

  • Link

    Direct link to this comment

    https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464359

Open in MATLAB Online

I got sidetracked, but that's the answer, Jan. :)

Can be done with

for i=1:2, hAxRef(i)=subplot(1,2,i); end % create reference positions

set(hAxes,{'position'},{hAxRef.Position}.')

using the cell notation to set multiple properties at one call.

Lenwo on 26 Jun 2017

Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464413

  • Link

    Direct link to this comment

    https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464413

Edited: Lenwo on 26 Jun 2017

Open in MATLAB Online

Hey Jan and dpb, thank you very much, it worked out for me. I combined your answers and rescaled the axes since the countour legends were cut off. That's what I finally came up with:

hFig = gcf;

hAxes = findobj(allchild(hFig), 'flat', 'Type', 'axes');

hTempFig = figure;

for i=1:2, hAxRef(i)=subplot(2,1,3-i); end % create reference positions

set(hAxes,{'position'},{hAxRef.Position}.')

delete(hTempFig);

axPosition = hAxes(1).Position;

set(hAxes(1), 'Position', [axPosition(1) axPosition(2) axPosition(3)-0.15 axPosition(4)]);

axPosition = hAxes(2).Position;

set(hAxes(2), 'Position', [axPosition(1) axPosition(2) axPosition(3)-0.15 axPosition(4)]);

I bet there is a more efficient way for the rescaling part, but it works just fine!

Thanks again!!

dpb on 26 Jun 2017

Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464467

  • Link

    Direct link to this comment

    https://www.mathworks.com/matlabcentral/answers/346178-how-to-change-the-subplot-positioning-in-an-existing-figure#comment_464467

Edited: dpb on 26 Jun 2017

Welcome, Jan got me to realize it would work that way; I initially was thinking about the subplot behavior that would delete the underlying axes if another occludes an existing one's position -- but at the lower level of directly manipulating the 'position' vectors there's no checking that that occurs...

Sign in to comment.

More Answers (0)

Sign in to answer this question.

See Also

Categories

MATLABGraphicsGraphics ObjectsGraphics Object Programming

Find more on Graphics Object Programming in Help Center and File Exchange

Tags

  • subplot
  • figure
  • axis
  • replot

Products

  • MATLAB

Community Treasure Hunt

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

Start Hunting!

An Error Occurred

Unable to complete the action because of changes made to the page. Reload the page to see its updated state.


How to change the subplot positioning in an existing figure? (11)

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list

Americas

  • América Latina (Español)
  • Canada (English)
  • United States (English)

Europe

  • Belgium (English)
  • Denmark (English)
  • Deutschland (Deutsch)
  • España (Español)
  • Finland (English)
  • France (Français)
  • Ireland (English)
  • Italia (Italiano)
  • Luxembourg (English)
  • Netherlands (English)
  • Norway (English)
  • Österreich (Deutsch)
  • Portugal (English)
  • Sweden (English)
  • Switzerland
    • Deutsch
    • English
    • Français
  • United Kingdom(English)

Asia Pacific

  • Australia (English)
  • India (English)
  • New Zealand (English)
  • 中国
  • 日本Japanese (日本語)
  • 한국Korean (한국어)

Contact your local office

How to change the subplot positioning in an existing figure? (2024)
Top Articles
Latest Posts
Recommended Articles
Article information

Author: Lakeisha Bayer VM

Last Updated:

Views: 5892

Rating: 4.9 / 5 (69 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Lakeisha Bayer VM

Birthday: 1997-10-17

Address: Suite 835 34136 Adrian Mountains, Floydton, UT 81036

Phone: +3571527672278

Job: Manufacturing Agent

Hobby: Skimboarding, Photography, Roller skating, Knife making, Paintball, Embroidery, Gunsmithing

Introduction: My name is Lakeisha Bayer VM, I am a brainy, kind, enchanting, healthy, lovely, clean, witty person who loves writing and wants to share my knowledge and understanding with you.