2010-08-27 19 views
13

Les étiquettes de tick pour les graduations supérieures à environ 10 000, sont formatées en 1x10^4 par exemple. Alors que la partie exponentielle apparaît au-dessus des axes correspondants. Cette mauvaise conduite a été bien décrite sur on matlab central, mais sans solution.Suppression de la mise en forme exponentielle en ticks de chiffres

Merci pour votre aide.


Le 'truc rapide'

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

ne fonctionne pas lorsqu'il est appliqué à bar3, comme on peut le voir sur la figure ci-dessous.

bar3 plot failing

+0

En regardant le fil que vous liez, je vois 'tick2text' (http://www.mathworks.com/matlabcentral/fileexchange/16003 -tick2text-create-easy-to-custom-tick-labels), ce qui semble parfaitement résoudre le problème. – Jonas

+0

tick2text met en forme les étiquettes de graduation, mais la partie exponentielle au-dessus de l'axe reste, ce qui semble vraiment étrange. Le poste de nouvelles donné ci-dessus remarque le même problème. – zellus

+0

L'image (http://www.mathworks.com/matlabcentral/fx_files/16003/4/tick2textexample.png) qui va avec 'tick2text' semble indiquer le contraire. L'image est-elle incorrecte? – Jonas

Répondre

1

Une façon d'obtenir un meilleur contrôle sur les étiquettes de tiques, et pour éviter la mise en forme exponentielle, est d'utiliser TICK2TEXT de l'échange de fichiers.

Voici un exemple:

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

Selon cette technical solution page, la méthode recommandée pour le formatage des étiquettes de graduation est ce (vous pouvez utiliser tout le nombre fonctions de formatage comme NUM2STR, sprintf, MAT2STR, ou tout autre ..)

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

alt text

Cependant, il semble y avoir un bug en ce qui concerne l'axe Z (les étiquettes sont correctement mis en forme, mais le multiplicateur exponentiel montre toujours pour une raison!)

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

alt text

Enfin, il y a une autre solution où nous remplaçons les étiquettes de tiques avec des objets texte (voir ce technical solution page comme référence):

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

J'apprécie votre solution! Pendant que je cherchais une solution, j'ai trouvé la solution technique que vous avez mentionnée, mais je n'ai pas vu sa pertinence. Le problème est maintenant bien préparé pour être archivé au support de MathWorks! – zellus

2

Une autre astuce que vous pouvez essayer consiste à mettre à l'échelle vos données avant de les tracer, puis à mettre à l'échelle les étiquettes de graduation pour faire apparaître qu'elles sont tracées sur une échelle différente. Vous pouvez utiliser la fonction LOG10 pour vous aider à calculer automatiquement un facteur d'échelle approprié en fonction de vos valeurs tracées. En supposant que vous avez vos données dans les variables x et y, vous pouvez essayer ceci:

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

Bonne solution, mais je préférerais aborder la partie graphique et non les données. – zellus

+0

@zellus Vous devriez pouvoir utiliser un objet 'hgtransform' pour mettre à l'échelle les données affichées. C'est la solution que nous avons utilisée. Les données de tracé ne sont pas modifiées, mais affichées au 1/1000ème de leur valeur réelle. – KitsuneYMG

+0

Génial. Il est tout à fait non-trivial comment transformer les valeurs sur l'axe. –