MATLAB: Problem with x-axis labels after overlapping 2 box plots

axesbox plot

I have the following code to compare two sets of box plots and there seems to be two misaligned x-axis labels after doing that! I have no idea what is causing this strange misalignment. Could the use of 'hold' be a problem in this case? Im using matlab 2014. Thanks.
x = rand(5,1);
y = rand(10,1);
z = rand(15,1);
Xpos = [2 5 12];
group = [repmat(Xpos(1), 5, 1); repmat(Xpos(2), 10, 1); repmat(Xpos(3), 15, 1)];
data=[x;y;z];
figure
boxplot(data, group,'positions', Xpos,'colors','k')
hold on
x =2+ rand(5,1);
y = 2+rand(10,1);
z = 2+rand(15,1);
group = [repmat(Xpos(1), 5, 1); repmat(Xpos(2), 10, 1); repmat(Xpos(3), 15, 1)];
data=[x;y;z];
boxplot(data, group,'positions', Xpos,'colors','r')
ylim([0 4])

Best Answer

The answer to the "why" is that boxplot, for reasons I've never been able to figure out, doesn't just change the tick positions and labels. Instead, it removes the xticks completely (or y-ticks, in the case of a horizontally-oriented boxplot) and replaces them with text annotation objects. And annotation objects are positioned relative to the figure, not the axis. Apparently slightly differently each time (possibly due to the fact that boxplot also, for reasons unknown, resizes axis, hence changing the figure-to-axis ratios between calls).
The easiest fix:
delete(findall(gcf, 'type', 'text'));
set(gca, 'xticklabelmode', 'auto', 'xtickmode', 'auto');
Related Question