Боке не показывает сюжет после добавления цветовой палитры - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу нарисовать круг с боке , цвет этого круга зависит от столбца DataFrame. Но я получил пустой сюжет. Если я не укажу цветовой аргумент для p.circle , он будет работать нормально.

Вот код, вы можете скопировать, вставить и запустить его.

from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, CategoricalColorMapper
from bokeh.palettes import Spectral11
import pandas as pd

df = pd.DataFrame({
    'price':[10,15,20,25,30],
    'action':[0,1,0,2,3],
    'sign':[0,-1,0,1,-1]
})

source = ColumnDataSource(data=dict(
    index=df.index,
    price=df.price,
    action=df.action,
    sign=df.sign
))

color_mapper = CategoricalColorMapper(factors= [str(i) for i in list(df.sign.unique())], palette=Spectral11)

p = figure(plot_width=800, plot_height=400)

# this works fine
p.circle('index', 'price', radius=0.2 , source=source) 

# this don't work
p.circle('index', 'price', radius=0.2 , color={'field':'sign',  'transform':color_mapper}, source=source)

show(p)

1 Ответ

0 голосов
/ 19 ноября 2018

Боке не нравится, когда вы берете некоторую информацию из ColumnDataSource, а другую информацию из другого источника. Это сработало для меня (в записной книжке):

from bokeh.plotting import figure, output_notebook, show
from bokeh.models import ColumnDataSource, CategoricalColorMapper
from bokeh.palettes import Spectral11
import pandas as pd

output_notebook()
df = pd.DataFrame({
    'price':[10,15,20,25,30],
    'action':[0,1,0,2,3],
    'sign':[0,-1,0,1,-1],
})

source = ColumnDataSource(data=dict(
    index=df.index,
    price=df.price,
    action=df.action,
    sign=df.sign,
    color=[Spectral11[i+1] for i in df.sign]
))

p = figure(plot_width=800, plot_height=400)

# this don't work
p.circle('index', 'price', radius=0.2 ,
         color='color',
         source=source)

show(p)
...