MATLAB: How to add axis labels while using for loops? Keep getting error: Index exceeds the number of array elements (4).

axis labels

I am getting an error trying to add axis titles to my plot. I am using a for loop, but it is only letting me add a legend and a title.
this is the error message:
Index exceeds the number of array elements (4). Error in Homework_1 (line 12) xlabel('real')
z = [2 + 5i; 1.41+1.41i; 5.87+9.15i; -3.07+6.72i; 0.997+0.071i; 3*exp(1.23i); 2*exp((pi/2)*1i); 13*exp(1i); 3; 2+11i; 4+2i; (1/5)+(4/5)*1i; ] ;
s = ['o'; '*'; 's'; 'p'; '+'; '>'; '<'; 'x'; 'd'; '.'; 'h'; '^';];
for index = 1:12
plot (z(index), s(index), 'MarkerSize', 10 );
hold on;
end
hold off;
title('complex numbers');
legend('2 + 5i', '1.41+1.41i', '5.87+9.15i', '-3.07+6.72i', '0.997+0.071i', '3*exp(1.23i)', '2*exp((pi/2)*1i)', '13*exp(1i)', '3', '2+11i', '4+2i', '(1/5)+(4/5)*1i');
xlabel('real');
ylabel('imaginary');

Best Answer

Updated answer
It appears that you may have a variable named xlabel that is interfering with the xlabel() function. To confirm this, run the line below.
which xlabel
If my hunch is correct, it should output: xlabel is a variable.
-----------------------------------------------------------------------
Old answer (still relevant)
As Kevin Chen mentioned, the code you shared does not result in any errors.
Here are 3 improvements to make.
  1. Define number of iterations based on number of values available
  2. Use DisplayName to label the legend
z = [2 + 5i; 1.41+1.41i; 5.87+9.15i; -3.07+6.72i; 0.997+0.071i; 3*exp(1.23i); 2*exp((pi/2)*1i); 13*exp(1i); 3; 2+11i; 4+2i; (1/5)+(4/5)*1i; ] ;
s = ['o'; '*'; 's'; 'p'; '+'; '>'; '<'; 'x'; 'd'; '.'; 'h'; '^';];
% Define legend strings
legStr = {'2 + 5i', '1.41+1.41i', '5.87+9.15i', '-3.07+6.72i', '0.997+0.071i', '3*exp(1.23i)', '2*exp((pi/2)*1i)', '13*exp(1i)', '3', '2+11i', '4+2i', '(1/5)+(4/5)*1i'};
for index = 1:numel(z) % use z or s
plot (z(index), s(index), 'MarkerSize', 10, 'DisplayName',legStr{index}); % use DisplayName
hold on;
end
hold off;
title('complex numbers');
legend(); % just call legend()
xlabel('real');
ylabel('imaginary');
You could also move "hold on" outside of the loop.
Related Question