how to label plot axes with index from a cell array of strings

24 vues (au cours des 30 derniers jours)
Robert Alvarez
Robert Alvarez le 12 Mar 2015
Commenté : Brendan Hamm le 13 Mar 2015
I currently do this with the following function but I am looking for a way to refer to the labels with an index instead of using the switch statement. For example plotlabel(1) for xlabel, plotlabel(2) for ylabel, etc. Is there a property of the axis handle that allows me to do this or some other 'elegant' approach instead of the switch?
function LabelAxes(hax,root,subscripts)
axes(hax); % the labels will apply to this axis
for kaxis = 1:length(subscripts)
label = sprintf('%s_{%s}',root,subscripts{kaxis});
switch kaxis
case 1; xlabel(label);
case 2; ylabel(label);
case 3; zlabel(label);
end
end
An example of the use of the function is to label the axes as x_1, x_2, x_3 I would use the following code
subscripts = {'1','2','3'};
LabelAxes(gca,'x',subscripts)
edit: I am trying to avoid using xlabel, ylabel, zlabel. Having separate functions for each axis forces me to use the switch statement. I would like to replace that with a single statement where I refer to the label for each axis by a number index instead of with separate functions.

Réponses (2)

Brendan Hamm
Brendan Hamm le 12 Mar 2015
label = strcat(root,subscripts);
xlabel(label{1})
ylabel(label{2})
zlabel(label{3})
  4 commentaires
Robert Alvarez
Robert Alvarez le 12 Mar 2015
Thanks. I am afraid you are right. I have poked around in the axis handle fields and everything seems to be separated into x,y, and z.
Since I have written the function, I will use it.
I did try out your method of handling 2D plots and I'll be darned it does work. Apparently 2D plots have a z-axis anyway.
Brendan Hamm
Brendan Hamm le 13 Mar 2015
I did consider one other way you could do this, as these are properties of the axes; 'XLabel' etc. We can use a method called "dynamic field names".
str = {'X','Y','Z'}
str = strcat(str,'Label');
ax = axes();
for i =1:3
ax.(str{i}) = label{i};
end
Here I assume that you are combining this with the method above. For more info on dynamic field names check out: http://blogs.mathworks.com/pick/2008/08/20/advanced-matlab-dynamic-field-names/

Connectez-vous pour commenter.


Sara Hafeez
Sara Hafeez le 12 Mar 2015
Use label as label{1} like this will work in cell wit the label commands.
  1 commentaire
Robert Alvarez
Robert Alvarez le 12 Mar 2015
Thanks for the answer but see my comment on Brendan Hamm's answer and the edit to the original question.

Connectez-vous pour commenter.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by