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));
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. –
:) - ¡estaba a punto de cuando recibí una llamada telefónica! – robince
La x al final de la segunda línea sigue siendo incorrecta. Debería leer yt, supongo. –