2016-02-10 13 views
9

In matplotlib die scatterplot bietet die Möglichkeit, die Farbe eines Grundes mit Wert oder Größe wie diese Handlung, um anzuzeigen:Mit colormap mit Bokeh Streu

enter image description here

Für bokeh, ähnlich examples scheinen manuell die Erzeugung rgb-Farben, die es schwierig machen, Plots mit einer um die Größenordnung skalierten Farbe zu erzeugen, insb. wrt. divergierende Colormaps.

Ist es möglich, ähnliche Funktionen in bokeh zu haben, oder matplotlib Colormaps verwenden, um die Farbe einzustellen?

Antwort

10

Es ist einfach genug, einfach die Farbdiagramme matplotlib direkt zu verwenden. Zum Beispiel verwendet die folgenden viridis in bokeh ‚s Beispiel (beachten Sie, dass ich ein jupyter Notebook bin mit):

import numpy as np 

from bokeh.plotting import figure, show, output_notebook 
import matplotlib as mpl 

output_notebook() 

N = 4000 
x = np.random.random(size=N) * 100 
y = np.random.random(size=N) * 100 
radii = np.random.random(size=N) * 1.5 
colors = [ 
    "#%02x%02x%02x" % (int(r), int(g), int(b)) for r, g, b, _ in 255*mpl.cm.viridis(mpl.colors.Normalize()(radii)) 
] 

p = figure() 

p.scatter(x, y, radius=radii, 
      fill_color=colors, fill_alpha=0.6, 
      line_color=None) 

show(p) 

Wesentlichen für jede matplotlib colormap in cm, es mit einer Reihe von Werten initialisiert wird eine Rückkehr Array mit jedem Wert ersetzt durch [r, g, b, a] Werte im Bereich [0,1]. Beachten Sie, dass davon ausgegangen wird, dass alle Werte zwischen 0 und 1 liegen. hier verwende ich matplot.colors.Normalize, um dies zu gewährleisten.