The XTickLabel command is not working properly.

I am trying to set the 2D graph axis label using h.XTickLabel = dx*h.XTick. Problem comes when I am stretching the graph.
First I plotted the graph ticks as 0,80,160,240,300, using above command. However when I am stretching the figure, axis numbers changes. Matlab automatically created almost twice of subdivisions and now the axis ticks are 0,80,160,240,300,0,80,160,240.

 Respuesta aceptada

Marc Jakobi
Marc Jakobi el 9 de Oct. de 2016
Editada: Marc Jakobi el 9 de Oct. de 2016
You could try
f = gcf;
f.ResizeFcn = 'h.XTickLabel = dx.*h.XTick;';
This will call
h.XTickLabel = dx.*h.XTick;
every time the figure resizes. However, if you would like to do this to more than one graphics object, you should put it in a separate function and put that function in the ResizeFcn.

3 comentarios

Hii Mark. Thanks for reply. I have been trying this approaches but couldn't get through. I couldn't find ResizeFcn property in the figure properties but I found that now it is replaced by new property named SizeChangeFcn (2016a).
nh=100, nv=200;
dh=10; dv=5;
mat=rand(nv,nh);
subplot(2,2,2); imagesc(0:nh-1,0:nv-1,mat)
h=gcf
g=get(gcf,'children');
h.SizeChangedFcn = 'g.XTickLabel=dh*g.XTick;';
However, during stretching it gives error: Undefined function or variable ''dh'.
when I used
SizeChangedFcn = 'g.XTickLabel=10*g.XTick;';
It again produces error undefined variable "g" or glass "g.XTick".
Any help is appreciated.
Marc Jakobi
Marc Jakobi el 10 de Oct. de 2016
Editada: Marc Jakobi el 10 de Oct. de 2016
If the variable dh is not in the workspace, you will have to save it. You could save it in the axes's UserData like this:
nh=100; nv=200;
dh=10; dv=5;
mat=rand(nv,nh);
subplot(2,2,2); imagesc(0:nh-1,0:nv-1,mat);
h=gcf;
ax = gca;
ax.UserData = dh;
g=get(gcf,'children');
h.SizeChangedFcn = 'set(gca,''XTickLabel'',get(gca,''UserData'').*get(gca,''XTick''));';
clear
However, for reasons of flexibility, I would recommend you write a separate function, since the above method will only work on a single subplot:
function axTickUpdate()
AX = findobj(gcf,'type','axes');
for i = 1:length(AX)
ax = AX(i);
ax.XTickLabel = ax.UserData.dh.*ax.XTick;
end
end
You can then create the figure like this:
nh=100; nv=200;
dh=10; dv=5;
mat=rand(nv,nh);
subplot(2,2,2); imagesc(0:nh-1,0:nv-1,mat);
h=gcf;
ax = gca;
ax.UserData.dh = dh;
g=get(gcf,'children');
h.SizeChangedFcn = 'axTickUpdate;';
clear
Marc Jakobi
Marc Jakobi el 10 de Oct. de 2016
NOTE: You will have to add dh to the UserData of each axes if you want it to work. Just set it to 1 if you don't want to manipulate the XTicks.

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 9 de Oct. de 2016

0 votos

Set the xticklabelmode to manual

1 comentario

AM
AM el 10 de Oct. de 2016
Editada: AM el 10 de Oct. de 2016
Hii Walter. Thanks for reply. I tried as you suggested but it didn't help.
Instead of it setting XTickMode = 'manual' could do the job.
Only problem with it is the axis limits are not set as desired.
E.g. axis ticks are plotted as : "0,50,100,.....400,450" .
Actually set of ticks should be :"0,50,100,.....400,450, 500".
Last tick label is missing each time I plot.

Iniciar sesión para comentar.

Preguntada:

AM
el 9 de Oct. de 2016

Comentada:

el 10 de Oct. de 2016

Community Treasure Hunt

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

Start Hunting!

Translated by