# How can I move the Xlabel without moving the X-Axis?

506 views (last 30 days)
Victor Hugo Garcia on 17 Mar 2019
Answered: Peter Seibold on 15 Mar 2023
I am having a hard time positioning the XLabel outside the plot and centered without moving the X-axis which is in the origin, here's my code:
x = [0:0.001:0.083];
y = (169.7056)*sin((376.991)*x);
plot(x,y,'r-*');
ax = gca;
ax.XAxis.Exponent = -3;
set(gca,'XTick',0:0.005:0.090);
set(gca,'YTick',-200:10:200);
xlabel('TIEMPO EN MILISEGUNDOS','Fontsize',20,'FontWeight','bold','Color','b')
ylabel('VOLTAJE','Fontsize',20,'FontWeight','bold','Color','b')
ax.YAxisLocation = 'origin';
ax.XAxisLocation = 'origin';
grid on;
grid minor;
Here's where I would like to position the Xlabel: I would really appreciate your help!

dpb on 17 Mar 2019
Edited: dpb on 18 Mar 2019
You've got to override the default position data for the label when move the axis location to center--
Ylm=ylim; % get x, y axis limits
Xlm=xlim; % so can position relative instead of absolute
Xlb=mean(Xlim); % set horizontally at midpoint
Ylb=0.99*Ylim(1); % and just 1% below minimum y value
hXLbl=xlabel('XLabel','Position',[Xlb Ylb],'VerticalAlignment','top','HorizontalAlignment','center');
"Salt to suit" positioning...having such in a callback function for axis resize/limits change would be needed to make it dynamically update.
Erfan Basiri on 20 Oct 2022
I think in the third line, Xlim should be changed to Xlm, and Ylim to Ylm in the next line

Przemyslaw Barnas on 26 Apr 2020
ex.
xlabel('TIEMPO EN MILISEGUNDOS','Position',[40 -205],'Fontsize',20,'FontWeight','bold','Color','b')
dpb on 26 Apr 2020
Yes, but the solution I gave is relative to the current y-axis lower ylim value and the middle of the xlim range so will be relative to the actual position. You've just hardcoded in a fixed number. That works for a specific case but only for the specific case/data values.

Peter Seibold on 15 Mar 2023
If you want a constant distance from the x axis, use this code:
% Move x label closer to x-axis, here 16 px
figure(1);
clf
plot(-5:10,-1:14)
ax=gca;
axOldUnits=ax.Units;% omit this line if ax units already in pixels
ax.Units='pixels'; % omit this line if ax units already in pixels
Ypx=ax.Position(4); % get axis height in px
Ylim=ylim; % get y axis limits in data units
Xm=mean(xlim); % horizontal midpoint x axis
Data_px=(Ylim(2)-Ylim(1))/Ypx; % Data units per pixel
DistXL = Ylim(1)-Data_px*16; % Distance X-Label 16 px below x axis
xlabel('My x-label','Position',[Xm DistXL],'VerticalAlignment','top','HorizontalAlignment','center');
ax.Units=axOldUnits; % omit this line if ax units already in pixels

### Categories

Find more on Axis Labels in Help Center and File Exchange

R2017b

### Community Treasure Hunt

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

Start Hunting!