How to label Xtick with assigned years?
    2 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Hello
I have been trying to plot some evolution of parameters as a function of years. Here are my trials with codes. Figure 0 is the default which starts from zero to Nyears. Figure 1 is developed with new vector xdate with each element is integer value of each year in four digits. But I wanted in two digits. After I created the list of strings with two digits, the labels are repeated as in Figure 2. Could you please help me how to fix such issues in Matlab.
X = [0.4851   0.12477 0.079046 0.56795   7.95E-05 0.49443  0.0722   0.87595 ...
     0.5065   0.41204 0.69801  0.70715   0.14759  0.54556  0.60394  0.46758 ...
     0.30115  0.48743 0.35104  0.0059046 0.21027  0.077238 0.66774  0.28482 ...  
     0.081285 0.3046  0.32423  0.19326   0        0.34675  0.044938 0.34572 ...
     0.68653  0.88543 0.51209  0.15263   0.28867  0.63446  0.027579 0.010771 ...
     0.67618  0.75188 0.83475  0.34111   0.43898  0.5252   0.38063  0.50016 ...
     0.54488  0.41151 0.31144];
Nyears = 52;
yearStart = 1956;
yearEnd = Nyears + yearStart;
xdate = yearStart+1:yearEnd;
istart = 2;
nend = Nyears;
xdate1 = xdate(istart:nend);
% calls a routine to create a vectors of strings for each years
[ idyears ] = stringYearLabel( yearStart, Nyears ); 
xtickLbl = [idyears(istart+1); idyears(5:10:end); idyears(end)];
plot(X, 'color', 'k'); %default plot as in Figure 0

plot(xdate1, X, 'color', 'k'); %include time as vector for X values
%set the limit of X axis; by default figure looks like Figure 1
set(gca, 'Xlim', [xdate1(1) xdate(end)]);

   % while setting like this plot come out to be terrible (Figure 2), labels limited
  set(gca, 'Xticklabel', xtickLbl);

function [ id2digit, idyears ] = stringYearLabel( startYear, Nyears )
% to generate vectors of year labels in string
%   id2digit : lists in two digits
%   idyears vectors in four digits
idyears  = cell(Nyears+1,1);
id2digit  = cell(Nyears+1,1);
k = 0;
for i = 1:Nyears+1
    idyears{i} = int2str(k + startYear);
    id2digit{i} = idyears{i}(end-1:end);
    k = k + 1; 
end
Thank you for your help...
0 Commenti
Risposta accettata
  dpb
      
      
 il 20 Giu 2016
        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".
0 Commenti
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su Axis Labels in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!