Figure Axis formatting; how to move label from axis

141 vues (au cours des 30 derniers jours)
jfrazie9
jfrazie9 le 13 Mar 2019
Commenté : Adam Danz le 12 Mai 2021
Hello, I am trying to create my own x axis value labels on a logarithmic scale. To do this I am trying to move the label down, thus creating space between the edge of the plot and the x axis title. I then would like am making annotation boxes with the values I want as my labels. I can create the annotation boxes and move them but am unable to create the space between the axis label and x axis title. Any help is greatly appreciated.

Réponse acceptée

Adam Danz
Adam Danz le 13 Mar 2019
Modifié(e) : Adam Danz le 3 Avr 2019
To change the position of the x label, store the handle to the xlabel, then change its position property. By default the axis labels are in 'data' units. If you want to move the x label down, you'll want to subtract from the y-coordinate of the x label position.
xlh = xlabel('x label');
xlh.Position(2) = xlh.Position(2) - 0.1; % move the label 0.1 data-units further down
In this demo below, the x label is moved down by 10% of its distance to the axes. Note that the x label position could have a positive or negative y-value so abs() is needed in order to always offet toward -inf.
figure
axh = axes;
xlh = xlabel('x label');
xlh.Position(2) = xlh.Position(2) - abs(xlh.Position(2) * 0.1);
Caution: if you move the x label too far, it may no longer be visible.
  2 commentaires
giannit
giannit le 12 Mai 2021
Modifié(e) : giannit le 12 Mai 2021
Doesn't work with heatmap, is there another way? Thanks
Adam Danz
Adam Danz le 12 Mai 2021
Heatmap axes are a different species and are difficult to customize. But that won't stop us 😎
To access the xlabel handle you have to use an undocumented method that will throw a warning but since we don't like to see warnings, it will be temporarily suppressed.
% h is the heatmap handle obtained by h=heatmap(__)
% Temporarily suppress warning associated with undocumented
% access to axes handle
origState = warning('query', 'MATLAB:structOnObject');
warningCleanup = onCleanup(@()warning(origState));
warning('off','MATLAB:structOnObject')
S = struct(h); % where h is heatmap handle
clear('warningCleanup')
xlh = S.Axes.XLabel; % <--- xlabel handle
Now you can set it's position properties as shown in my answer.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Data Distribution Plots dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by