2014-09-22 16 views
17

Ich versuche, eine Farbleiste zu meinem Bild mit Matplotlib zu setzen. Das Problem tritt auf, wenn ich versuche, die Ticklabels in wissenschaftlicher Notation zu schreiben. Wie kann ich die wissenschaftliche Notation (dh 1x10^0, 2x10^0, ..., 1x10^2 usw.) in den Ticks des Farbbalkens erzwingen?Wissenschaftliche Notation Farbbalken in Matplotlib

Beispiel, lassen Sie uns erstellen und Handlung und Bild mit Farbbalken:

import matplotlib as plot 
import numpy as np 

img = np.random.randn(300,300) 
myplot = plt.imshow(img) 
plt.colorbar(myplot) 
plt.show() 

Wenn ich das tue, ich folgendes Bild erhalten:

image created with the previous code

Allerdings würde Ich mag an Sehen Sie die Ticklabels in wissenschaftlicher Schreibweise ... Gibt es einen einzigen Zeilenbefehl, um dies zu tun? Sonst gibt es einen Hinweis da draußen? Vielen Dank!

Antwort

25

könnten Sie colorbar's format parameter verwenden:

import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.ticker as ticker 

img = np.random.randn(300,300) 
myplot = plt.imshow(img) 

def fmt(x, pos): 
    a, b = '{:.2e}'.format(x).split('e') 
    b = int(b) 
    return r'${} \times 10^{{{}}}$'.format(a, b) 

plt.colorbar(myplot, format=ticker.FuncFormatter(fmt)) 
plt.show() 

enter image description here

+0

Danke, aber ich möchte sehen, 10^1 10^2, usw. anstatt e + 01, e + 02. Ist es möglich? – Alejandro

+1

Ich habe Ihren Code etwas modifiziert, um die wissenschaftliche Notation mit Latex zu zeigen. Vielen Dank! Ihre Lösung ist sehr nützlich und sehr interessant. – Alejandro

+0

Danke für die Verbesserung. – unutbu

19

Sie das Format der colorbar angeben können Zecken wie folgt:

pl.colorbar(myplot, format='%.0e') 
+1

Danke, aber ich würde gerne sehen, 10^1 10^2, etc, anstatt e + 01, e + 02. Ist es möglich? – Alejandro

Verwandte Themen