2012-05-04 13 views
11

he hecho una trama en Matlab, usando:Extracción notación científica en la etiqueta de la garrapata de una parcela Matlab

hold on 
plot(t1,Dx1,'r') 
xlabel('t (ps)') 
ylabel('Deviation of coordinate from initial coordinate (Å)') 
plot(t1,Dy1,'g') 
plot(t1,Dz1,'b') 
hold off 

Sin embargo, las etiquetas de garrapatas en el eje Y se generan en notación científica:

Scientific Notation on y-axis

¿Hay alguna manera de que pueda eliminar la notación científica y solo tenga las etiquetas y un rango de -0.0025 a 0.0005? ¡Gracias!

Respuesta

9

Se podría tratar de establecer manualmente las etiquetas de la marca a sí mismo usando sprintf:

yt = get(gca,'YTick'); 
set(gca,'YTickLabel', sprintf('%.4f|',yt)) 
+0

Argh, eras solo unos segundos más rápido ... ;-). De todos modos, debe reemplazar "xtick" y "xticklabel" por "ytick" y "yticklabel". Y la x al final de la segunda línea debería leer xt. –

+1

:) - ¡estaba a punto de cuando recibí una llamada telefónica! – robince

+1

La x al final de la segunda línea sigue siendo incorrecta. Debería leer yt, supongo. –

1

Usted puede utilizar este código para controlar el formato de etiquetas señalizadoras de eje y. Este código proviene de ticks_format.m.

% Establezca el formato de marcación preferida aquí.

y_formatstring = '%3.4f'; 

% Aquí está el código.

ytick = get(gca, 'ytick'); 
for i = 1:length(ytick) 
    yticklabel{i} = sprintf(y_formatstring, ytick(i)); 
end 
set(gca, 'yticklabel', yticklabel) 
2

usted tiene que escribir lo siguiente:

set(gcf, 'renderer', 'zbuffer') 
+0

@Andrew No sé cómo explicarlo, ¡pero realmente funciona! –

4

También luché con conseguir mi ejes de los gráficos para mostrar en la noción fija en lugar de la notación científica. La parte más frustrante para mí fue que la etiqueta "x10^4" permanecería en el borde del cuadro de la trama incluso después de reasignar manualmente las etiquetas a la notación fija. Finalmente, gracias a la publicación anterior rastreé el problema en el renderizador de figuras. Estaba usando 'OpenGL'. Cuando cambié a 'zbuffer', la etiqueta "x10^4" desaparecía correctamente cuando reiniciaba manualmente las etiquetas. Aquí hay un código de ejemplo que combina el formato '###, ###. 0' con las etiquetas del eje y, e incluso actualiza dinámicamente las etiquetas y cuando hace zoom/pan etc., gracias a dos útiles funciones que encontré en el intercambio de archivos Matlab. El lugar para encontrar las otras dos funciones se incluye como comentarios debajo de la función de ejemplo.

function []=TickFixExample() 

figure %this one works 
myRenderer='zbuffer'; 
set(gcf,'Renderer', myRenderer); 
axesh = axes(); 
set(gca,'YLim',[20000 20100]); 
title(myRenderer) 
ticklabelformat(gca,'y','###,###.0'); 

figure %this one doesn’t work 
myRenderer='OpenGL'; 
set(gcf,'Renderer', myRenderer); 
axesh = axes(); 
set(gca,'YLim',[20000 20100]); 
title(myRenderer) 
ticklabelformat(gca,'y','###,###.0'); 

función ticklabelformat (hAxes, AXNAME, formato) por Y. Altman, se puede encontrar en: http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat-set-a-dynamic-format-of-axes-tick-labels o por google 'MATLAB ticklabelformat' he modificado ligeramente cambiando la línea 105 como sigue:

tickLabels = arrayfun(@(x)(FormatNumberScalarInputStrOutput`(x,format)),tickValues,'UniformOutput',false);` 

en lugar de la versión de Altman:

tickLabels = arrayfun(@(x)(sprintf(format,x)),tickValues,'UniformOutput',false); 

que el cambio prevé la funcionalidad del separador de coma miles por función y = NumberFormatter (Números, FormatPattern) por S. Lienhard, también en Matlab File Exchange.Mi versión modificada del código Lienhard se dado íntegramente a continuación:

function y = FormatNumberScalarInputStrOutput(Number ,FormatPattern) 

% adapted 12-2012 by D. Bourgoyne from NUMBERFORMATTER by S. Lienhard 
% 
% The pound sign (#) denotes a digit, the comma is a placeholder for the 
% grouping separator, and the period is a placeholder for the decimal 
% separator. 
% The pattern specifies leading and trailing zeros, because the 0 
% character is used instead of the pound sign (#). 
% 
% Examples: 
% NumberFormatter(rand(5),'0.000') 
% NumberFormatter(rand(5)*100,'###,###.000') 
import java.text.* 
v = DecimalFormat(FormatPattern); 
y = char(v.format(Number)); 
3

Trate de añadir esto después de la creación de los ejes:

ax = gca; 
ax.YAxis.Exponent = 0; 

Aquí se muestra un ejemplo:

x = 0:0.1:10; 
y = 1000*x.^2; 

%Plot with default notation: 

subplot(1,2,1) 
plot(x,y) 


%Plot without exponent: 

subplot(1,2,2) 
plot(x,y) 
ax = gca 
ax.YAxis.Exponent = 0; 
+1

¡Leí docenas de respuestas, y esta fue la mejor! Gracias @GHH! – user1271772

Cuestiones relacionadas