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:
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.
I try to save my graphics like scalable vector graphics but the Tex or LaTex string doesn’t look right. Can you help me?
@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 on the Matlab File Exchange is relatively old (2012) compared to the latest one on Github (2015).
While this version of plot2svg was last updated in 2015, a more recent version (fork) can be found in https://github.com/kupiqu/plot2svg, and unlike the original version this one seems to be actively maintained.
plot2svg show the symbol pi but it’s unpleasant.
I reported about the bug to MathWorks but the response wouldn’t be fast.
The problem was gone in r2018a.
No,
saveas(gcf,'filename.svg')
still yields axis ticks not formatted with latex. Or what are you referring to?