2017-06-20 4 views
0

Ich möchte die Farbe eines Bokeh Linie Plot (Bokeh Version 0.12.5) mit einer ColumnDataSource. Mit einem Liniendiagramm wird jedoch nichts gezeichnet. Wenn ich dagegen einen Circle-Renderer verwende, funktioniert alles wie erwartet. Im Folgenden finden Sie ein Beispielprogramm mit einem Liniendiagramm und einem Kreisdiagramm, in dem Sie die entsprechenden Zeilen kommentieren bzw. auskommentieren können, um das Zeichenverhalten anzuzeigen. Ich habe auch eine Codezeile für ein Liniendiagramm eingefügt, wo die Farbe explizit definiert ist und die Zeichnung perfekt funktioniert. Ich habe ein paar ähnliche Fragen gestellt, aber ich konnte keine solide Lösung für dieses Problem finden oder feststellen, ob ich etwas fundamental falsch mache. Danke für Ihre Hilfe.Bokeh Linie Plot Farbe in ColumnDataSource

# bokeh version 0.12.5 
# run in terminal with: python -m bokeh serve --show line_plot_color.py 

from bokeh.io import curdoc 
from bokeh.models import ColumnDataSource 
from bokeh.plotting import Figure 
from bokeh.layouts import row 

source = ColumnDataSource(data = dict(color = ['green','green','green'], xs = [1,2,3], ys = [1,2,3])) 
fig = Figure(plot_width=300, plot_height=300) 

#r = fig.circle('xs','ys',source = source, size = 12, fill_color = 'color') # works as expected 
r = fig.line('xs','ys',source = source, line_color = 'color') # fails to plot; no errors or warnings in terminal 
#r = fig.line('xs','ys',source = source, line_color = 'green') # works as expected 

layout = row(fig) 
curdoc().add_root(layout) 

Antwort

0

Zuerst Ihnen helfen, den Bokeh-Server mit dem Debuggen, ist es sehr nützlich, um die devtools zu verwenden, die mit Web-Browser kommen. Die Devtools-Konsole enthält nützliche Debugging-Informationen, wie es in Ihrem Beispiel der Fall ist.

Zweitens, durch die Docs die Zeile Glyph-Methode ist nicht eingerichtet, um eine Spalte Datenquelle Wert für seine Färbung zu erhalten. Wenn Sie mehrere Linien mit verschiedenen Farben auf einer einzelnen Figur darstellen möchten, können Sie das Symbol multi_line verwenden. Um dieses Glyph zu verwenden, müssen Sie Ihre Datenquelle xs und ys so ändern, dass sie eine Liste von Listen für jede Zeile in Ihrer multi_line darstellen. Hier ist ein kurzes Beispiel.

source2 = ColumnDataSource(data = dict(color = ['green','red'], xs = [[1, 2],[2, 4]], ys = [[1, 2],[2, 4]])) 
r = fig.multi_line('xs','ys',source = source2, line_color = 'color')