Matlab - Ejes con formato definido

   
Vista:
Imágen de perfil de Mercedes

Ejes con formato definido

Publicado por Mercedes (5 intervenciones) el 25/01/2015 10:54:38
Buenas:
Necesito ayuda con un problema. Cuando creo las gráficas y los valores de y son elevados Matlab pone los ejes como se ve en la figura ej, multiplicados por una exponencial, pero cuando los valores son pequeños no lo hace.
Lo que yo quiero es que lo haga siempre, es decir, que si mi eje va de 0 a 2000 pues ponga: 0, 0.5, 1 ... x 10^3
Si uso YTickLabel me pone el exponencial en cada número y eso no lo quiero. Con la función: sprintf ('e', y), tampoco me funciona, ya que los valores del eje no varian de forma continua.
¿Alguna idea?
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Daniel

Ejes con formato definido

Publicado por Daniel (212 intervenciones) el 26/01/2015 18:30:36
una solución mala (a mi entender) es esta

Aclaro funciona, pero es mala porque escribe las cosas a mano y si luego querés cambiar algo no funciona bien, otra igual no se me ocurre


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
% adquiere los valores de los "Ticks" en X e Y
gx=get(gca,'XTick');
gy=get(gca,'YTick');
 
% busca el maximo exponente
 
gm=num2str(gy(1,size(gy)),'%1.2e');
gnmax=str2double(gm(end-3:end));
 
% los convierte al formato que se desea
for j=1:size(gy,2)
gss{j}=num2str(gy(1,j)/(10^gnmax));
 
end
% asigna los valores de los "Ticks" en Y
set(gca,'YtickLabel',gss);
 
% pone el x10^exponente arriba a la izquierda
text(gx(1)+0.01*(gx(end)-gx(1)),gy(end)+0.03*(gy(end)-gy(1)),['x 10^{' num2str(gnmax) '}'])

espero que igualmente te sirva

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mercedes

Ejes con formato definido

Publicado por Mercedes (5 intervenciones) el 26/01/2015 20:26:39
Hola Daniel,.

Muchas gracias por tu respuesta. Tú solución es mucho mejor que la mía, ya que iba a poner los Ticks a mano.
Lo que pasa es que no consigo que me funcionen las sentencias.
Te adjunto el resultado de mis variables en el Workspace
a
Como puedes ver, a la hora de calcular el máximo hay un problema.
Y dos preguntas más porque en el código
1
2
gm=num2str(gy(1,size(gy)),'%1.2e');
gnmax=str2double(gm(end-3:end));
.
Para gm ¿por qué el número de cifras es %1.2e?
En la setencia que va a continuación ¿por qué restas el final menos 3? Es que esa parte no la entiendo.
Muchas gracias de nuevo por la respuesta y siento ser tan peasada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Daniel

Ejes con formato definido

Publicado por Daniel (212 intervenciones) el 26/01/2015 20:50:10
primero cambiá la linea de gm=... por

1
gm=num2str(gy(1,end),'%1.2e');

quizá poner un
1
clear gm
antes del codigo tambien ayude (lo digo porque copié textualmente el código que probé en matlab)

las lineas que mencionas hacen lo siguiente

la primer linea gm=... agarra el ultimo tick y lo pasa numero a string con el formato "1.2e"

1-->numero de dígitos antes del punto decimal
2-->número de dígitos luego del punto decimal
e-->notación exponencial de 3 dígitos

la siguiente linea "lee" los últimos dígitos que corresponden al exponente

Saludos

Daniel


PD por las dudas pongo tal cual lo escribí en matlab



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
clc
clear all
x=linspace(9,10,100);
y=linspace(0,1e-3,100);
plot([x;x]',[y;1.1*y]'),hold on
%plot(x,1.1*y),hold on
 
% adquiere los valores de los "Ticks" en X e Y
gx=get(gca,'XTick');
gy=get(gca,'YTick');
 
% busca el maximo exponente
 
gm=num2str(gy(1,end),'%1.2e');
gnmax=str2double(gm(end-3:end));
 
% los convierte al formato que se desea
for j=1:size(gy,2)
gss{j}=num2str(gy(1,j)/(10^gnmax));
 
end
% asigna los valores de los "Ticks" en Y
set(gca,'YtickLabel',gss);
 
% pone el x10^exponente arriba a la izquierda
text(gx(1)+0.01*(gx(end)-gx(1)),gy(end)+0.03*(gy(end)-gy(1)),['x 10^{' num2str(gnmax) '}'])
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Mercedes

Ejes con formato definido

Publicado por Mercedes (5 intervenciones) el 27/01/2015 10:56:38
Muchisimas gracias por la ayuda. Ahora si que me funciona.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar