2010-08-27 5 views
13

Marque las etiquetas para las marcas mayores de aproximadamente 10'000, obtenga el formato de 1x10^4 por ejemplo. Mientras que la parte exponencial aparece arriba de los ejes correspondientes. Esta mala conducta también se ha descrito bien en on matlab central, pero sin una solución.Suprimir el formato exponencial en las marcas de figura

Gracias por su ayuda.


El 'truco rápido'

set(gca, 'YTickLabel',get(gca,'YTick')) 

no funcionó cuando se aplica a bar3, como puede verse en la siguiente figura.

bar3 plot failing

+0

Mirando el hilo que enlace, veo 'tick2text' (http://www.mathworks.com/matlabcentral/fileexchange/16003 -tick2text-create-easy-to-customize-tick-labels), que parece resolver perfectamente el problema. – Jonas

+0

tick2text formatea las etiquetas de tic, pero la parte exponencial encima del eje permanece, lo que parece realmente extraño. La publicación de noticias dada anteriormente nota el mismo problema. – zellus

+0

La imagen (http://www.mathworks.com/matlabcentral/fx_files/16003/4/tick2textexample.png) que va junto con 'tick2text' parece indicar lo contrario. ¿Está mal la imagen? – Jonas

Respuesta

1

Una forma de obtener un mejor control sobre las etiquetas señalizadoras, y evitar el formato exponencial, es utilizar TICK2TEXT desde el intercambio de archivos.

He aquí un ejemplo:

y = cool(7); %# define some data 
ah = axes; %# create new axes and remember handle 
bar3(ah,y*1E6,'detached'); %# create a 3D bar plot 
tick2text(ah, 'ztickoffset' ,-1.15,'zformat', '%5.0f', 'axis','z') %# fix the tick labels 
7

EDITAR

De acuerdo con esta technical solution page, la forma recomendada de formatear las etiquetas señalizadoras es esta (se puede utilizar cualquiera de los numerosos funciones de formato como NUM2STR, sprintf, MAT2STR, o cualquier otra ..)

y = cool(7); 
bar(y(:,1)*1e6) 
set(gca, 'YTickMode','manual') 
set(gca, 'YTickLabel',num2str(get(gca,'YTick')')) 

alt text

Sin embargo parece que hay un error cuando se trata del eje Z (las etiquetas tienen el formato correcto, pero el multiplicador exponencial sigue mostrando por alguna razón!)

y = cool(7); 
bar3(y*1e6, 'detached') 
set(gca, 'ZTickMode','manual') 
set(gca, 'ZTickLabel',num2str(get(gca,'ZTick')')) 

alt text

Por último, hay otra solución, donde sustituimos las etiquetas señalizadoras con objetos de texto (ver este technical solution page como referencia):

y = cool(7); 
bar3(y*1e6, 'detached') 
offset = 0.25; Xl=get(gca,'XLim'); Yl=get(gca,'YLim'); Zt=get(gca,'ZTick'); 
t = text(Xl(ones(size(Zt))),Yl(ones(size(Zt)))-offset,Zt, num2str(Zt')); %#' 
set(t, 'HorizontalAlignment','right', 'VerticalAlignment','Middle') 
set(gca, 'ZTickLabel','') 

alt text

+0

¡Agradezco su solución! Mientras busqué una solución en Google, sí conecté la 'solución técnica' a la que hace referencia también, pero no vi su relevancia. ¡El problema está bien preparado ahora para ser presentado al soporte de MathWorks! – zellus

2

Otro truco que puedes probar es escalar tus datos antes de trazarlos, luego escala las etiquetas para hacer que parezca que está trazado en una escala diferente. Puede usar la función LOG10 para ayudarlo a calcular automáticamente un factor de escala apropiado en función de sus valores graficados. Asumiendo que tiene los datos de las variables x y y, puede intentar esto:

scale = 10^floor(log10(max(y))); %# Compute a scaling factor 
plot(x,y./scale);     %# Plot the scaled data 
yTicks = get(gca,'YTick');  %# Get the current tick values 
set(gca,'YTickLabel',num2str(scale.*yTicks(:),'%.2f')); %# Change the labels 
+0

Buena solución, pero podría preferir abordar la parte de gráficos y no los datos. – zellus

+0

@zellus Debería poder usar un objeto 'hgtransform' para escalar los datos mostrados también. Esa fue la solución que terminamos usando. Los datos de trazado no se modifican, pero se muestran a 1/1000 de su valor real. – KitsuneYMG

+0

Impresionante. No es muy trivial cómo transformar los valores en el eje. –

Cuestiones relacionadas