Customizing axes tick labels

In last week’s post, I discussed various ways to customize bar/histogram plots, including customization of the tick labels. While some of the customizations that I discussed indeed rely on undocumented properties/features, many Matlab users are not aware that tick labels can be individually customized, and that this is a fully documented/supported functionality. This relies on the fact that the default axes TickLabelInterpreter property value is 'tex', which supports a wide range of font customizations, individually for each label. This includes any combination of symbols, superscript, subscript, bold, italic, slanted, face-name, font-size and color – even intermixed within a single label. Since tex is the default interpreter, we don’t need any special preparation – simply set the relevant X/Y/ZTickLabel string to include the relevant tex markup.

To illustrate this, have a look at the following excellent answer by user Ubi on Stack Overflow:

Axes with Tex-customized tick labels

plot(1:10, rand(1,10)) ax = gca;   % Simply color an XTickLabel ax.XTickLabel{3} = ['\color{red}' ax.XTickLabel{3}];   % Use TeX symbols ax.XTickLabel{4} = '\color{blue} \uparrow';   % Use multiple colors in one XTickLabel ax.XTickLabel{5} = '\color[rgb]{0,1,0}green\color{orange}?';   % Color YTickLabels with colormap nColors = numel(ax.YTickLabel); cm = jet(nColors); for i = 1:nColors ax.YTickLabel{i} = sprintf('\\color[rgb]{%f,%f,%f}%s', cm(i,:), ax.YTickLabel{i}); end

In addition to 'tex', we can also set the axes object’s TickLabelInterpreter to 'latex' for a Latex interpreter, or 'none' if we want to use no string interpretation at all.

As I showed in last week’s post, we can control the gap between the tick labels and the axle line, using the Ruler object’s undocumented TickLabelGapOffset, TickLabelGapMultiplier properties.

Also, as I explained in other posts (here and here), we can also control the display of the secondary axle label (typically exponent or units) using the Ruler’s similarly-undocumented SecondaryLabel property. Note that the related Ruler’s Exponent property is documented/supported, but simply sets a basic exponent label (e.g., '\times10^{6}' when Exponent==6) – to set a custom label string (e.g., '\it\color{gray}Millions'), or to modify its other properties (position, alignment etc.), we should use SecondaryLabel.

 Print

5 Responses to Customizing axes tick labels

1. Evgenii says:

I try to save my graphics like scalable vector graphics but the Tex or LaTex string doesn’t look right. Can you help me?

x = 0 : pi/360 : 2*pi; y = sin(x+pi); hFigure = figure; hAxes = subplot(1,1,1); hLine = plot(x,y); hAxes.XGrid = 'on'; hAxes.YGrid = 'on'; hAxes.TickLabelInterpreter = 'Latex'; hAxes.XLim = [0 2*pi]; hAxes.XTick = 0 : pi/6 : 2*pi; hAxes.XTickLabel = { ... '$-\pi$' ... ,'$-5\pi/6$' ... ,'$-2\pi/3$' ... ,'$-\pi/2$' ... ,'$-\pi/3$' ... ,'$\pi/6$' ... ,'$0$' ... ,'$\pi/6$' ... ,'$\pi/$3' ... ,'$\pi/2$' ... ,'$2\pi/3$' ... ,'$5\pi/6$' ... ,'$\pi$' ... };
2. Evgenii says:

The problem was gone in r2018a.

• Stefan says:

No, saveas(gcf,'filename.svg') still yields axis ticks not formatted with latex. Or what are you referring to?