Figure Axis formatting; how to move label from axis

451 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)

Community Treasure Hunt

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

Start Hunting!

Translated by