Copying your X array, I find
>> Nyr=length(X)
Nyr =
51
instead of 52...minor point perhaps you missed a datapoint in the posting. Anyway, that aside--
yr=1956:1956+Nyr-1; % generate a year vector to match...
figure
plot(yr,X) % plot versus 4-digit year
ylim=[yr(1) yr(end)] % set x-limits to data bounds
set(gca,'fontsize',9) % maybe you like the looks of this "more better"??
For two-digit years,
xt=get(gca,'xtick'); % get the tick values
set(gca,'xticklabel',num2str(mod(xt(:),100),'%02d')) % set mod 100 w/ leading 0
Doing the labels this way makes sure you've got the same number as the number of ticks -- labels and ticks have to be 1:1 or won't use 'em all (if too many) or will repeat (not enough).
NB: The (:) in the reference to xt in the num2str call -- this is a must (or another way to ensure a column vector) as num2str only creates the character string array by row; if the values were in a row vector all the values would come out as one long string. : is the shorthand for "return all elements of the array as a single column".