2010-08-27 16 views
13

etichette delle tacche per le zecche più grande di circa 10'000, ottenere formattato per 1x10^4, per esempio. Mentre la parte esponenziale appare sopra gli assi corrispondenti. Questo comportamento scorretto è stato ben descritto allo on matlab central, ma senza soluzione.reprimere formattazione esponenziale nella figura zecche

Grazie per il vostro aiuto.


Il 'trucco veloce'

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

non ha funzionato se applicato a Bar3, come si può vedere nella figura seguente.

bar3 plot failing

+0

Guardando il filo si collega, vedo 'tick2text' (http://www.mathworks.com/matlabcentral/fileexchange/16003 -tick2text-create-easy-to-customize-tick-labels), che sembra risolvere perfettamente il problema. – Jonas

+0

tick2text formatta le etichette di graduazione, ma la parte esponenziale sopra l'asse rimane, il che sembra davvero strano. Il post di notizie di cui sopra nota lo stesso problema. – zellus

+0

L'immagine (http://www.mathworks.com/matlabcentral/fx_files/16003/4/tick2textexample.png) che accompagna 'tick2text' sembra indicare il contrario. L'immagine è sbagliata? – Jonas

risposta

1

Un modo per ottenere un migliore controllo sulle etichette delle tacche, e per evitare la formattazione esponenziale, è quello di utilizzare TICK2TEXT dal File Exchange.

Ecco un esempio:

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

EDIT

Secondo questa technical solution page, il modo consigliato di formattare le etichette delle tacche è questo (è possibile utilizzare qualsiasi del numero funzioni di formattazione come NUM2STR, sprintf, MAT2STR, o qualsiasi altro ..)

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

alt text

Tuttavia sembra che ci sia un bug quando si tratta di l'asse Z (le etichette siano correttamente formattati, ma il moltiplicatore esponenziale è ancora mostrando per qualche ragione!)

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

alt text

Infine, c'è un'altra soluzione in cui sostituiamo le etichette delle tacche con oggetti di testo (vedi questo technical solution page come riferimento):

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

Apprezzo la tua soluzione! Mentre cercavo su google per una soluzione, mi sono imbattuto nella "soluzione tecnica" a cui fai riferimento, ma non ho visto la sua rilevanza. Il problema è ora ben preparato per essere presentato al supporto di MathWorks! – zellus

2

Un altro trucco si può provare è quello di scalare i vostri dati prima di tracciare, poi scalare le etichette delle tacche per far sembrare che si è tracciata su una scala diversa. È possibile utilizzare la funzione LOG10 per aiutare a calcolare automaticamente un fattore di scala appropriato in base ai valori tracciati. Supponendo di avere i dati nelle variabili x e y, si può provare questo:

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

Buona soluzione, ma potrei preferire affrontare la parte grafica e non i dati. – zellus

+0

@zellus Dovresti essere in grado di utilizzare un oggetto 'hgtransform' per ridimensionare anche i dati visualizzati. Questa è stata la soluzione che abbiamo utilizzato. I dati di stampa sono non molati, ma visualizzati a 1/1000 del loro valore attuale. – KitsuneYMG

+0

Fantastico. È abbastanza non banale come trasformare i valori sull'asse. –

Problemi correlati