2016-07-12 16 views
0

Ich habe Daten, die logarithmisch ist. Dies ist, wie ich es zeichnen:Korrigieren Sie die Bezeichnungen meiner Farbleiste korrekt?

contourf(x, y, log10(my_data));colorbar; 

nun das Bild sieht gut - Farben werden skaliert entsprechend dem Wert jedes Punktes, so dass mein Bild bunt ist. Die neben meiner Farbleiste angezeigten Werte sind jedoch falsch - sie vermissen die Basis (d. H. Ich habe anstelle von 10^3). Also habe ich versucht CAXIS wie vorgeschlagen here mit:

cmin = min(my_data(:)); 
cmax = max(my_data(:)); 
C = contourf(x, y, log10(my_data));colorbar;caxis([cmin cmax]); 

Es half ein wenig: die von der colorbar angezeigten Werte korrekt sind. Jedoch:

  1. Mein Bild ist jetzt von einer Farbe, als ob ich meine_Daten statt log10 (my_data) geplottet. Gemäß der documentation ist dies ein beabsichtigter Effekt. Wie werde ich es los?
  2. Die Werte in der Farbleiste werden als 100, 200, 400, itd angezeigt. H kann ich es in die wissenschaftliche Notation ändern?

bearbeiten: Souver Idee funktioniert. Meine ursprünglichen Ticks sind jedoch nicht nur nette Potenzen von . So sind die neuen Zecken waren folgende: 10^-1, 10^-0,5, 10^0, 10^0,5, 10^1, etc. Aber ich will nicht Zecken so als 10^-0,5, 10^0,5 usw. so habe ich eine neue (kürzere) Liste der Zecken und die Etiketten, die ich will:

set(cbar, 'TickLabels', new_labels) 

Nun sieh mal meine Etiketten wie folgt aus: 10^-1, 10^-0, 10^1, 10^2, 10^-1, 10^-0, 10^1, 10^2 usw.

Wie soll ich umgehen damit?

+0

Verwenden 'labels = arrayfun (@ (x) [ '10^{', num2str (x), '}'], Zecken, 'uniformoutput', false);' 'Beachten Sie den {... } 'hinzugefügt ... – EBH

Antwort

2

Sie möchten die Eigenschaft TickLabels ändern, um für jede Teilstriche eine benutzerdefinierte Beschriftung zu erstellen. Sie können die aktuellen Tick Speicherorte abrufen und dann für jede eine Beschriftung erstellen.

cbar = colorbar; 

% Get the current location of the tick marks 
ticks = get(cbar, 'ticks'); 

% Now create a label for each tick mark (you can modify these however you want) 
labels = arrayfun(@(x)['10^', num2str(x)], ticks, 'uniformoutput', false); 

% Assign the labels to the colorbar 
set(cbar, 'TickLabels', labels) 

aktualisieren

Sie können sich manuell festlegen, auch die entsprechenden Kontrollstellen vor den obigen Code ausgeführt wird.

ticks = [0 10 100 1000]; 
set(cbar, 'ticks'); 
+0

danke.Aber was soll ich tun, wenn ich weniger Zecken haben will als in meiner ursprünglichen Handlung? Ich habe den Code aus Ihrer Antwort verwendet und habe Ticks wie * 10^1.5 * erhalten. Das ist nicht verwunderlich, da meine ursprünglichen Ticks nicht unbedingt Potenzen von * 10 * sind. Ich habe versucht, die Ticks herauszufiltern, die ich nicht will. Aber Matlab versucht, jedem Tick ein Label zuzuordnen. Jetzt wiederholen sich die Ticks. Wie soll ich damit umgehen? – user2738748

+1

können Sie manuelle Markierungen durch 'set (cbar, 'Ticks', yourticks, 'TickLabels', yourlabels ') erreichen.' Yourticks' muss ein Vektor sein, der die Ticks enthält, während' yourlabels' ein Zellen-Array mit den entsprechenden Strings sein muss. Außerdem können Sie sich die [Matlab-Dokumentation] (http://mathworks.com/help/matlab/ref/colorbar.html#bt56gkg) ansehen. – serial

Verwandte Themen