Ho anche lottato con ottenere la mia trama assi da visualizzare nella nozione fisso invece di notazione scientifica. La parte più frustrante per me è stata che l'etichetta "x10^4" sarebbe rimasta sul bordo della casella di stampa anche dopo aver riassegnato manualmente le etichette di graduazione alla notazione fissa. Infine, grazie al post precedente ho rintracciato il problema con il renderizzatore di figure. Stavo usando "OpenGL". Quando sono passato a "zbuffer", l'etichetta "x10^4" scompariva correttamente quando reimpostavo manualmente le etichette di spunta. Ecco un codice di esempio che unisce il formato '###, ###. 0' alle etichette dell'asse y e aggiorna dinamicamente le etichette y anche quando esegui lo zoom/pan ecc, grazie a due utili funzioni che ho trovato su lo scambio di file Matlab. Il posto dove trovare le altre due funzioni è incluso come commenti sotto la funzione di esempio.
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');
funzione ticklabelformat (hAxes, AXNAME, formato) da Y. Altman, si possono trovare in: http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat-set-a-dynamic-format-of-axes-tick-labels o googling 'ticklabelformat MATLAB' ho modificato leggermente cambiando linea 105 come segue:
tickLabels = arrayfun(@(x)(FormatNumberScalarInputStrOutput`(x,format)),tickValues,'UniformOutput',false);`
al posto della versione di Altman:
tickLabels = arrayfun(@(x)(sprintf(format,x)),tickValues,'UniformOutput',false);
che il cambiamento prevede la funzionalità di migliaia di separatori di virgola tramite la funzione y = NumberFormatter (Numbers, FormatPattern) di S. Lienhard, anche su Scambio file Matlab.La mia versione modificata del codice di Lienhard è riporta integralmente qui di seguito:
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, eri solo secondi più veloce ... ;-). Ad ogni modo, dovresti sostituire "xtick" e "xticklabel" con "ytick" e "yticklabel". E la x alla fine della seconda riga dovrebbe leggere xt. –
:) - stavo proprio per quando ho ricevuto una telefonata! – robince
La x alla fine della seconda riga è ancora sbagliata. Dovresti leggerlo, immagino. –