Change default figure properties?

Is there any way to change the default figure properties in MATLAB?
For example, I want all my figures to have a certain axis font size, background color, xlabel/ylabel font size, and line width. Nothing fancy, just want to change some basic default settings.
I know how to do this for each individual plot in my scripts. However, I am generating several different types of plots (plot, hist, surf, etc) and a lot of them from several different scripts.
Thanks for any help with this.

2 Comments

Yes, there is.. I am using it for all my matlab figures.
set(groot,'defaultLineLineWidth',2.5)
set(0,'DefaultaxesLineWidth', 1.5)
set(0,'DefaultaxesFontSize', 14)
set(0,'DefaultaxesFontWeight', 'bold')
set(0,'DefaultTextFontSize', 14)
set(0,'DefaultaxesFontName', 'Times new Roman')
set(0,'DefaultlegendFontName', 'Times new Roman')
set(0,'defaultAxesXGrid','on')
set(0,'defaultAxesYGrid','on')
Do you know how to the reset those properties?

Sign in to comment.

 Accepted Answer

I don't know if there's a way to change the defaults, but you'll save a lot of work if you create a function to apply your 'default' settings to any supplied figure. Pass in a handle to that figure.
function = SetFigureDefaults( f )
% Put all your common code in here
end
That will make your code a whole lot more readable. You can hide this function in your script so that it's not visible to the outside world. That way you can take advantage of this approach in many other scripts without getting confused.

4 Comments

Yeah, I was thinking some thing like that, but there does not seem to be any "global" functions for changing basic defaults as I mentioned above.
Say for example, I want to generate following two figures,
figure(1)
plot(x,y)
xlabel('X')
ylabel('Y')
title('X vs Y')
figure(2)
hist(R,100)
xlabel('R')
ylabel('N')
title('Hist')
If I want a white background (as opposed to the default grey) and a given font size for xlabel/ylabel and a different font size for the title, I have to use,
figure1 = figure('Color',[1 1 1]);
plot(x,y)
xlabel('X','FontSize',14)
ylabel('Y','FontSize',14)
title('X vs Y','FontSize',18)
figure2 = figure('Color',[1 1 1]);
hist(R,100)
xlabel('R','FontSize',14)
ylabel('N','FontSize',14)
title('Hist','FontSize',18)
What functions/commands would change these defaults?
Well, you need to store your axis handle from those plots to change the labels etc... But you could just do this one at the time by using the current figure (gcf) and current axis (gca).
As for setting properties...
set(gcf, 'Color', [1 1 1])
set( get(gca,'XLabel'), 'FontSize', 14 )
etc...
You have to call SetFigureDefaults() AFTER you do your axis labelling and title...
xlabel('X'); ylabel('Y'); title('X vs Y');
SetFigureDefaults(gcf);
If you're just using gcf and gca, don't bother having an argument to your defaults function.
Got it, seems to work. I have to set all these properties in a script (.m file) and call it after every figure.
Thank you very much for your help.
Thank you!

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 4 May 2012
Edited: Wendy Fullam on 4 Feb 2013

5 Comments

Thanks for the link explaining the figure hierarchy structure in MATLAB. All so useful with the above post.
That link shows you how to set figure defaults. For example,
set(0, 'DefaultFigureBackground', [0.2 0.7 0.5]);
A link to the relevant section of the page provided by Walter: http://www.mathworks.com/help/techdoc/creating_plots/f7-21465.html#f7-18841
That seems to no longer work in R2017a.
I would very much like to kill the 'autoupdate' feature of 'legend' in one single global action. It seems there should be some way to set the default for the 'legend' aspect of 'plot'.
David, you asked this as a separate question and the comment you left indicates you found a solution.
Ah, I see why you said this no longer works. The URL changed for the page to which Walter link; the updated address is:
https://www.mathworks.com/help/matlab/creating_plots/default-property-values.html
Or you can search for the phrase "default property values" and that should work regardless of which release you're using. The version of that page appropriate for the release you're using should be among the first page of hits, if not the first hit.

Sign in to comment.

Categories

Find more on Creating, Deleting, and Querying Graphics Objects in Help Center and File Exchange

Tags

Asked:

on 3 May 2012

Commented:

on 24 Apr 2022

Community Treasure Hunt

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

Start Hunting!