2016-07-11 8 views
0

den folgenden Code Beicolorbar Änderung Textwert matplotlib

x = np.random.random((50))*2 -1 
y = np.random.random((50)) 
plt.scatter(x,y,c=x**3,cmap='viridis') 
cb = plt.colorbar() 

#I want a smarter (& working) version of this 
cb.ax.set_yticklabels(
    [str(np.cbrt(eval(i.get_text()))) for i in cb.ax.get_yticklabels()] 
    ) 

I Unterschiede auf kleinen Skalen betonen wollen x**3 die Farbe im Streudiagramm zu setzen, aber ich möchte den Wert von x angezeigt werden (nicht x**3 wie in der gezeigten Grafik) auf der Farbleiste.

Das glaube ich kann, indem man die Etiketten mit Hilfe der inversen Funktion (hier Würfel root) durchgeführt werden. Das Problem dabei ist, dass Matplotlib typischerweise runde Werte wählt, während dies im Allgemeinen solche Werte nicht wählen würde.

enter image description here

Antwort

1

Sie können dies ein FuncFormatter aus dem matplotlib.ticker Modul tun.

Zum Beispiel:

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

x = np.random.random((50))*2 -1 
y = np.random.random((50)) 

plt.scatter(x,y,c=x**3,cmap='viridis',vmin=-1,vmax=1) 
cb = plt.colorbar() 

def label_cbrt(x,pos): 
    return "{:4.2f}".format(np.cbrt(x)) 

cb.formatter = ticker.FuncFormatter(label_cbrt) 
cb.update_ticks() 

plt.show() 

enter image description here