In last week’s post [1], 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 [2]. 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 [3] by user Ubi on Stack Overflow:
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 [1], 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 [4] and here [5]), 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 [6], 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.
5 Comments To "Customizing axes tick labels"
#1 Comment By Evgenii On January 30, 2018 @ 12:23
I try to save my graphics like scalable vector graphics but the Tex or LaTex string doesn’t look right. Can you help me?
#2 Comment By Yair Altman On January 30, 2018 @ 20:10
@Evgenii – this is a bug in Matlab. Please report it to MathWorks. Until the bug is fixed, you can use the plot2svg utility, which generates nice-looking results without the bug.
Note: the version of plot2svg [12] is relatively old (2012) compared to the [13] (2015).
While this version of plot2svg was last updated in 2015, a more recent version (fork) can be found in [14], and unlike the original version this one seems to be actively maintained.
#3 Comment By Evgenii On February 1, 2018 @ 12:46
plot2svg show the symbol pi but it’s unpleasant.
I reported about the bug to MathWorks but the response wouldn’t be fast.
#4 Comment By Evgenii On March 25, 2018 @ 12:09
The problem was gone in r2018a.
#5 Comment By Stefan On June 12, 2018 @ 15:49
No,
saveas(gcf,'filename.svg')
still yields axis ticks not formatted with latex. Or what are you referring to?