How do I change the font size for text in my figure?
Show older comments
I'm using "set(gca,'fontsize', 18);" in a function to change fonts in a figure. My code does not throw an error, but it also does not change the font size. I can manually change the fonts via the UI, but this is a slow process. I'm running MATLAB 2013a on RHEL6.5
I've also tried "set(gca,'FontSize', 18);" and specifying 'FontSize', 18 in title, xlabel, ylabel and legend. None of these have worked.
Please advise!
14 Comments
the cyclist
on 26 May 2014
Could you post the simplest possible code that exhibits the problem, and be very specific about which fonts you are trying to change?
Tomas
on 16 Jan 2015
I have the same problem. No idea how to solve it... :-(
See Daniels solution here: http://www.mathworks.com/matlabcentral/answers/1238-font-size-changes-in-figures -- summarized:
- sudo apt-get install xfonts-base xfonts-100dpi xfonts-75dpi
- log out
- log in
Assuming ubuntu/mint linux
Brennan Dubuc
on 24 Nov 2015
I've had the same problem on R2014b, but strangely putting a hold on solved it for me. For instance: ----------------------
figure
set(gca,'fontsize',18)
hold on
plot(x,y)
hold off
----------------------
When I use this, the font changes size. When I take the hold away, the font doesn't change. Not sure why, but it at least solved the problem pretty easily.
Carry
on 23 Mar 2016
If you set axis properties in your figure (XLim, YLim etc) you have to give the command referring to the fontsize at the end. So first the plot command then axis properties and then ylabel with fontsize. Maybe there's another way but this did it for me.
hassan roohian
on 7 Oct 2016
>> help xlabel...
xlabel('text','property1',property1value,'property2',property2value)
here is an example...
title('speed vs. time','fontsize',18);
you can include more properties inside the parenthesis, i only did one in my example
Ian Hunter
on 19 Sep 2017
Edward's sol worked for me on ubuntu w/ R2016A many thx!
voltmeter cav
on 10 May 2020
Here is my lines. I am using 2014a version. if I put "set(gca... )" line in 6th line, it does not change the font. but if I put this to the end of lines it works.
1 t=0:0.1:6;
2 x=(t.^2)/2;
3 y=(t.^2)/4;
4 z=(t.^2)/8;
5 k=(t.^2)/16;
6 %set(gca,'Fontsize',20);
7 plot(t,x,'lineWidth',2);
8 grid on;
9 hold on;
10 plot(t,y,'lineWidth',2);
11 hold on
12 plot(t,z,'lineWidth',2);
13 hold on;
14 plot(t,k,'lineWidth',2);
15 xlabel('(Sn)','Fontsize',20);
16 ylabel('(J)','Fontsize',20);
17 legend({'L=1H','L=2H','L=4H','L=8H'},'Fontsize',20);
18 set(gca,'Fontsize',20);
Alex Hruksa
on 28 Aug 2020
This bit of code is super useful, thanks Image Analyst!
Muhammad Umar Farooq
on 20 Mar 2022
There are two ways of changing font details of graph.
First method:
title('Figure', 'FontSize', 12);
xlabel('x-axis', 'FontSize', 12);
text(x, y, 'Figure, 'FontSize', 12);
Second method:
Plot the graph, double click on the font whose details you want to change, or right click and open settings. Customize the details manually as per your desire. Good luck.
Joseph Rojas
on 22 Nov 2022
Moved: Adam Danz
on 13 May 2024
The resolution of my video card and monitor makes the size of fonts in Matlab too small to read. How can I increase the size of fonts in the desktop only for Matlab app. Using Win 11
Image Analyst
on 22 Nov 2022
Moved: Adam Danz
on 13 May 2024
Did you check the Preferences button on the Tool ribbon? Or, like with any windows program, hold down the ctrl key while you spin the mouse button.
S = settings();
S.matlab.fonts.codefont.Size.TemporaryValue = 14; % fontsize (points)
This will persist until you close MATLAB so you could put this in your startup function if you want this to take affect every time you open MATLAB.
Revert to default using
clearTemporaryValue(S.matlab.fonts.codefont.Size)
Accepted Answer
More Answers (11)
Mike Garrity
on 10 Feb 2016
Yes, this can be confusing. Here's what you're probably seeing:
figure % Creates a figure
set(gca,'FontSize',18) % Creates an axes and sets its FontSize to 18
plot(x,y) % Resets the axes and plots into it
Notice the "Resets the axes" part. One of the things that happens there is that the FontSize property gets set to the default!
This doesn't happen when hold is on because then the axes doesn't get reset.
There are a couple of ways around this.
The simplest is to set the FontSize after plotting.
A somewhat more complicated way is to change the default:
figure('DefaultAxesFontSize',18)
plot(x,y)
Does that make sense?
1 Comment
Rik
on 9 Feb 2017
The point is that the font size property is inherited from the figure. So instead of calling gca, you should call gcf. But indeed, best practice is setting the font size on creation of the figure window.
José Crespo Barrios
on 10 Feb 2016
set(findall(gcf,'-property','FontSize'),'FontSize',18)
5 Comments
Ian Hunter
on 19 Sep 2017
When I invoke this after a call to figure, there does not appear to be any change in text size.
Ian Hunter
on 19 Sep 2017
on ubuntu w/ R2016A
ubaid haroon
on 27 Jun 2019
I use this on unix R2015a and it seems to work for me
Mauricio Iwanaga
on 15 Apr 2021
Many thanks. It worked perfectly fine to my case. Apparently, change fontsize in Matlab text function is not so trivial, but your tip works really good (I'm using Matlab R2021a).
Image Analyst
on 16 Apr 2021
@Mauricio Iwanaga I'm not sure of your definition of "trivial", but the text() function also has a 'FontSize' option:
text(x, y, str, 'FontSize', 18, 'FontWeight', 'bold');
It seems pretty trivial to me to use it, once you know that that input option is available.
Image Analyst
on 27 May 2014
Usually you can set the font size on every control individually as you update its text, like
title('This is my plot', 'FontSize', 24);
xlabel('x axis', 'FontSize', 24);
text(x, y, 'Hey, look at this', 'FontSize', 24);
What's wrong with doing it like that? That's what I do.
5 Comments
Edward
on 27 May 2014
Image Analyst
on 27 May 2014
Edited: Image Analyst
on 27 May 2014
I find that hard to believe. Here, try this code:
subplot(2,2,1);
title('This is 12 point font', 'FontSize', 12);
subplot(2,2,2);
title('This is 18 point font', 'FontSize', 18);
subplot(2,2,3);
title('This is 24 point font', 'FontSize', 24);
subplot(2,2,4);
title('This is 30 point font', 'FontSize', 30);
Then type alt-PrintScreen and go to http://snag.gy and paste in your screenshot. Then come back here and use the image icon to past in the snaggy URL to include your screenshot here so I can see and verify that what you say about the 'FontSize' option not working is true.

Edward
on 29 May 2014
Edited: Image Analyst
on 29 May 2014
Image Analyst
on 29 May 2014
I don't know. That's bizarre. You should call tech support.
Peter
on 27 Sep 2016
well, probably this font is not available in other sizes
Sean de Wolski
on 27 May 2014
I think what you want to do is set the 'Default' font size for the axes
set(gca,'DefaultTextFontSize',18)
Now any text object on that axes will have 18 font
text(0.5,0.5,'hello')
4 Comments
Image Analyst
on 29 May 2014
Edward's "Answer" moved here since it's a reply to Sean:
set(gca,'DefaultTextFontSize',18) executes without triggering an error, but unfortunately, does not change the font size.
vvf vvff
on 10 Feb 2020
This command is awoseme!!!!!!!!!!!!
Image Analyst
on 11 Feb 2020
Or, since r2014b, you can do it without the set() function:
ax = gca;
ax.DefaultTextFontSize = 18;
DN7
on 18 Dec 2020
If gca does not work for you, make sure you didn't accidentally create a variable named that way. use:
clearvars gca
h_gca=gca;
h_gca.FontSize=13;
to ensure that. I accidentally created this variable (struct) when I ran gca.FontSize = 13, which does not change the font size of the current axis, but instead creates a new struct.
Daniel
on 26 Mar 2015
2 votes
I just wanted to weigh in on this given I've spent the last couple of hours looking into this.
I am running Matlab 2013b on Ubuntu 12.04LTS. Similar as many here, changing labels/legend properties works fine but setting the axis ticklabel fontname/size was not working - at least, the axis property list reflected the change, but the window plot was not rendering to the new font settings. After printing the plot to eps and including this in my latex compiled document, it turns out the axis font properties were changing. It would appear to be just a rendering bug.
Installing additional fonts did not work for me - and I did not expect to, since rendering/changing font properties of other objects such as labels and legends worked fine in Matlab.
So for those of you cocnerned with the looks of your plots for publications, it would appear to me that the actual exported figures do reflect the editing (at least this was my experience when printing to .eps).
Cheers,
Daniel
Renato Campana
on 18 Nov 2017
2 votes
Im working with Matlab 2016. You can tried two things:
1)figure('DefaultAxesFontSize',30); % here the font size is 30. figure (1) plot(x,y,'LineWidth',4); % note that the linewidth here is 4 xlabel('length bar','FontSize',18); % note that the font size label here is 18 ylabel('wide bar','FontSize',18); % note that the font size label here is 18
and you must to use the dame command figure('DefaultAxesFontSize',30) in each figure. If you dont specified the font size in each label, the labels shows the size in "30"
Or you can tried:
2) figure (1) plot(x,y,'LineWidth',4); set(gca,'FontSize',28); % please, note that the font size is AFTER the plot command :)
1 Comment
Chekad Sarami
on 31 Aug 2020
Great thanks.
Anu
on 1 Jan 2015
1 vote
I have also encountered the same problem. I was using Linux Mint OS. I solved it by installing the xfont 100 and 75 dpi and the truetype fonts. Try it out once.
Image Analyst
on 10 May 2020
Moved: Image Analyst
on 18 Apr 2023
Here is code that shows you how to change just about anything about the axes that you want:
% Demo to make a black graph with blue title, red Y axis, green X axis, and yellow grid.
% Initialization steps:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clearvars;
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 24;
% Create sample data.
X = 1 : 20;
Y = rand(1, 20);
plot(X, Y, 'gs-', 'LineWidth', 2, 'MarkerSize', 10);
grid on;
title('Y vs. X, Font Size 12', 'FontSize', 12, 'Color', 'b', 'FontWeight', 'bold');
% Make labels for the two axes.
xlabel('X Axis, Font Size 15');
ylabel('Y axis, Font Size 24');
yticks(0 : 0.2 : 1);
% Get handle to current axes.
ax = gca
% This sets background color to black.
ax.Color = 'k'
ax.YColor = 'r';
% Make the x axis dark green.
darkGreen = [0, 0.6, 0];
ax.XColor = darkGreen;
% Make the grid color yellow.
ax.GridColor = 'y';
ax.GridAlpha = 0.9; % Set's transparency of the grid.
% Set x and y font sizes.
ax.XAxis.FontSize = 15;
ax.YAxis.FontSize = 24;
% The below would set everything: title, x axis, y axis, and tick mark label font sizes.
% ax.FontSize = 34;
% Bold all labels.
ax.FontWeight = 'bold';
hold off

vimal kumar chawda
on 12 Aug 2020
figure(4)
set(gca,'FontSize',50)
plot(A_OBS(2).RxTime(:)/3600, No_ele2(1:r2, 1), '.b');
hold on;
plot(A_OBS(4).RxTime(:)/3600, No_ele4(1:r4, 1)-0.05, '.g');
xlabel('Time [h], Font size 15');
ylabel('Number of visible satellites,Font size 15');
title('Comparison between Javad and u-blox receivers (Gallileo)');
legend('Javad(SN:0082)','u-blox(SN:1771)');
Why it is not working ?
I need to maximize the scale and the text in the axis scale.
2 Comments
Elias Salilih
on 4 Aug 2023
I understood that font size of axis numbers can be changed with "set(gca,'FontSize',50)", how about font size of a double axis plot (I mean plotyy)
The plotyy() function creates two axes objects. You can set their properties separately.
x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
hp = plotyy(x,y1,x,y2); % get axes handles
% set properties of each axes
% i'm going to use different sizes for sake of clarity
hp(1).FontSize = 8; % controls xruler and LH yruler
hp(2).FontSize = 16; % controls RH yruler
Eitvydas Karauskas
on 4 Apr 2021
Hey guys, I have a different problem with text function. Why does my text size changes when I zoom in or out of my graph? I need to put text at a fixed sized, so it doesn't change when I zoom in or out. I'm adding my code.
Thanks for help ;)
%defining latitude and longitude
latlim=[53.9 55.5];
lonlim=[24 26];
%loading world map
map=worldmap(latlim,lonlim);
%loading lithuania borders from external source and displaying it as a
%geografic coordinates
country=shaperead('gadm36_LTU_0.shp','usegeocoords',true,'BoundingBox', [lonlim', latlim']);
geoshow(map,country,'facecolor',[1 1 1],'linewidth',2);
%converting coordinates to lat/lon
%defining VNO
VNOlon = 25.293639;
VNOlat = 54.636056;
geoshow( VNOlat, VNOlon, 'marker','.', 'markerfacecolor','blue','markeredgecolor','blue','markersize',6);
textm(VNOlat,VNOlon, 'VNO','fontweight','bold','color','black','fontsize',6);
%converting km to nn and defining radius
r = [ 9.26 18.52 27.78];
circlem(VNOlat,VNOlon,r,'linestyle','--','linewidth',0.5);
%defining radius from VNO
textm(54.65831449445, 25.14947845266, '5nm VNO','rotation',70,'fontsize',3,'fontunits','normalized');
Michael Neely
on 20 Nov 2021
0 votes
None of the above answers on using a single line to "set gca" or "set default" actually work. I have had success setting the fonts in individual print commands (as some of the answers suggest). However, it is quite annoying that there is no simple way to put one line that changes the font size for everything.
The only way I can do it is to physically operate on the figure itself, clicking and enlarging, and this seems to be highly dependent on the size of my window that I use to display the figure. If I physically enlarge the window then the fonts might be modified. This makes it very difficult to consistently print figures for a publication. Some figures will have font sizes slightly different than others.
2 Comments
Romanos Sahas
on 3 Oct 2022
Edited: Romanos Sahas
on 3 Oct 2022
Assuming that you have used 'text(...)' while creating your figure and it is the resulting labels that you want to target, here is a fix which worked for me.
g = gcf;
set(findall(g,'Type','text'),'FontSize',14)
Adam Danz
on 3 Oct 2022
fontsize(gcf, 14, 'points')
Categories
Find more on Axes Appearance 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!
