2010-08-27 8 views
13

Tick Etiketten für Ticks größer als ca. 10'000, formatiert werden, um zum Beispiel 1x10^4. Während der exponentielle Teil über den entsprechenden Achsen erscheint. Dieses Fehlverhalten wurde auch auf on matlab central gut beschrieben, aber ohne eine Lösung.Unterdrücken exponentielle Formatierung in Abbildung Ticks

Danke für Ihre Hilfe.


Der 'schnelle Trick'

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

funktionierte nicht, wenn sie bar3 angelegt, wie in der folgenden Abbildung zu sehen ist.

bar3 plot failing

+0

am Gewinde Suchen Sie verknüpfen, sehe ich 'tick2text' (http://www.mathworks.com/matlabcentral/fileexchange/16003 -tick2text-create-easy-to-customize-tick-labels), die das Problem perfekt zu lösen scheint. – Jonas

+0

tick2text formatiert die Tickbezeichnungen, aber der exponentielle Teil über der Achse bleibt erhalten, was wirklich merkwürdig aussieht. Der oben angegebene Nachrichtenbeitrag bemerkt dasselbe Problem. – zellus

+0

Das Bild (http://www.mathworks.com/matlabcentral/fx_files/16003/4/tick2textexample.png), das mit 'tick2text' einhergeht, scheint etwas anderes zu bedeuten. Ist das Bild falsch? – Jonas

Antwort

1

Eine Möglichkeit, eine bessere Kontrolle über Strichbeschriftungen zu bekommen, und die exponentielle Formatierung zu vermeiden, ist TICK2TEXT aus dem File Exchange zu verwenden.

Hier ist ein Beispiel:

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

Nach dieser technical solution page, die empfohlene Methode, die Strichbeschriftungen der Formatierung ist dies (Sie eine der Zahlenformatierung Funktionen wie num2str verwenden können, sprintf, MAT2STR oder jede andere ..)

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

alt text

Allerdings scheint es einen Fehler zu sein, wenn es um die Z-Achse kommt (die Etiketten korrekt formatiert, aber das exponentielle Multiplizierer noch aus irgendeinem Grund zeigt!)

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

alt text

Schließlich gibt es noch eine andere Abhilfe, wo wir die Tick-Beschriftungen mit Textobjekten ersetzen (siehe diese technical solution page als Referenz):

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

Ich schätze Ihre Lösung! Während ich nach einer Lösung gegoogelt habe, habe ich die "technische Lösung" getroffen, auf die Sie auch verwiesen haben, aber ich sah ihre Relevanz nicht. Das Problem ist jetzt gut vorbereitet, um beim MathWorks-Support eingereicht zu werden! – zellus

2

Ein anderer Trick, den Sie ausprobieren können, besteht darin, Ihre Daten zu skalieren, bevor Sie sie plotten, und dann die Hilfsstrichsbeschriftungen so zu skalieren, dass sie auf einer anderen Skala dargestellt werden. Mit der Funktion LOG10 können Sie automatisch einen geeigneten Skalierungsfaktor basierend auf den aufgetragenen Werten berechnen. Angenommen, Sie haben Ihre Daten in Variablen x und y, können Sie dies versuchen:

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

Gute Lösung, aber ich könnte lieber den Grafikteil und nicht die Daten angehen. – zellus

+0

@zellus Sie sollten ein 'hgtransform'-Objekt verwenden können, um die angezeigten Daten zu skalieren. Das war die Lösung, die wir verwendet haben. Die Plotdaten sind unbelastet, werden jedoch auf 1/1000 ihres tatsächlichen Werts angezeigt. – KitsuneYMG

+0

Ehrfürchtig. Es ist ziemlich nicht trivial, wie man die Werte auf der Achse transformiert. –