2016-09-30 1 views
3

У меня есть таблица, которая содержит количество раз, когда студент обращался к действию.Инструмент Hover не работает в Bokeh

df_act5236920.head() 

    activities studs 
0 3.0  student 1 
1 4.0  student 10 
2 5.0  student 11 
3 6.0  student 12 
4 2.0  student 13 
5 4.0  student 14 
6 19.0  student 15 

Если я пытаюсь добавить инструмент парения в гистограмме, создаваемого этим dataframe через код ниже:

from bokeh.charts import Bar 
from bokeh.models import Legend 

from collections import OrderedDict 
TOOLS = "pan,wheel_zoom,box_zoom,reset,hover,save" 
bar = Bar(df_act5236920,values='activities',label='studs',title = "Activity 5236920 performed by students", 
     xlabel="Students",ylabel="Activity",legend=False,tools=TOOLS) 
hover = bar.select_one(HoverTool) 
hover.point_policy = "follow_mouse" 
hover.tooltips = OrderedDict([ 
    ("Student Name", "@studs"), 
    ("Access Count", "@activities"), 
]) 
show(bar) 

Когда я наведите курсор мыши на гистограмме, она показывает значение студента, но не значения активности, я даже пытался использовать «$ activities», но результат все тот же.

enter image description here

Я попытался с помощью ColumnDataSource вместо DataFrame на основе других вопросов переполнения стека, которые я прочитал, как это видно в приведенном ниже коде:

source = ColumnDataSource(ColumnDataSource.from_df(df_act5236920)) 

from collections import OrderedDict 
TOOLS = "pan,wheel_zoom,box_zoom,reset,hover,save" 
bar = Bar('studs','activities',source=source, title = "Activity 5236920 performed by students",tools=TOOLS) 
hover = bar.select_one(HoverTool) 
hover.point_policy = "follow_mouse" 
hover.tooltips = OrderedDict([ 
    ("Student Name", "@studs"), 
    ("Access Count", "@activities"), 
]) 
show(bar) 

Это дает мне следующую ошибку:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-76-81505464c390> in <module>() 
    3 # bar = Bar(df_act5236920,values='activities',label='studs',title = "Activity 5236920 performed by students", 
    4 # xlabel="Students",ylabel="Activity",legend=False,tools=TOOLS) 
    ----> 5 bar = Bar('studs','activities',source=source, title = "Activity 5236920 performed by students",tools=TOOLS) 
    6 hover = bar.select_one(HoverTool) 
    7 hover.point_policy = "follow_mouse" 

C:\Anaconda2\lib\site-packages\bokeh\charts\builders\bar_builder.pyc in Bar(data, label, values, color, stack, group, agg, xscale, yscale, xgrid, ygrid, continuous_range, **kw) 
319  kw['y_range'] = y_range 
320 
--> 321  chart = create_and_build(BarBuilder, data, **kw) 
322 
323  # hide x labels if there is a single value, implying stacking only 

C:\Anaconda2\lib\site-packages\bokeh\charts\builder.pyc in create_and_build(builder_class, *data, **kws) 
66  # create the new builder 
67  builder_kws = {k: v for k, v in kws.items() if k in builder_props} 
---> 68  builder = builder_class(*data, **builder_kws) 
69 
70  # create a chart to return, since there isn't one already 

C:\Anaconda2\lib\site-packages\bokeh\charts\builder.pyc in __init__(self, *args, **kws) 
292    # make sure that the builder dimensions have access to the chart data source 
293    for dim in self.dimensions: 
--> 294     getattr(getattr(self, dim), 'set_data')(data) 
295 
296    # handle input attrs and ensure attrs have access to data 

C:\Anaconda2\lib\site-packages\bokeh\charts\properties.pyc in set_data(self, data) 
170    data (`ChartDataSource`): the data source associated with the chart 
171   """ 
--> 172   self.selection = data[self.name] 
173   self._chart_source = data 
174   self._data = data.df 

TypeError: 'NoneType' object has no attribute '__getitem__' 

Я даже попытался создать источник ColumnDataSource с нуля, передав ему столбцы dataframe в виде списка значений эс, но я до сих пор получил ту же ошибку, как показано выше

source = ColumnDataSource(data=dict(
    studs=students, 
    activities=activity_5236920, 
)) 

У меня такая же проблема, когда я пытаюсь реализовать hovertool на тепловой карте, а также. Может ли кто-нибудь помочь в том, как это исправить?

+0

Попробуйте 'source = ColumnDataSource (df_act5236920)' from_df() устарел в Bokeh 0.9.3. Возможно, стоит сделать снимок –

+0

@BobHaffner Я попробовал, но ошибка все тот же. Исходный объект был создан с двумя другими реализациями, о которых я упоминал. Я предполагаю, что, возможно, они пустые, и поэтому он бросает ошибку NoneType, но я не знаю, почему она пуста. – Sift

+0

Хорошо. Что касается ошибки, я думаю, что ваш источник в порядке. Просто [Bar()] (http://bokeh.pydata.org/en/0.11.0/docs/reference/charts.html#bar) ожидает, что источник данных будет первым аргументом, и вы передаете строку Попробуйте 'bar = Bar (df_act5236920, label = 'studs', values ​​= 'activities', source = source, title =« Activity 5236920, выполненный студентами », tools = TOOLS). Нет подсказки на вашей проблеме наконечника инструмента tho.Удачи –

ответ

0

Итак, пройдя много документации, я наконец-то понял несколько вещей.

Во-первых, ошибка NoneType была вызвана тем фактом, что для гистограммы вам необходимо передать блок данных, а также ColumnDataSource, для отображения отображаемой диаграммы. Поэтому код должен был быть:

bar = Bar(df_act5236920,values='activities',label='studs',title = "Activity 5236920 performed by students", 
     xlabel="Students",ylabel="Activity",legend=False,tools=TOOLS,source=source) 

Обратите внимание, как имя dataframe и источник = источник оба упомянутых в методе Bar(). Для второго выпуска значения, которое не отображается, я использовал @height, который по существу отображал высоту выбранной полосы, которая в этом случае была значением счета.

hover.tooltips = OrderedDict([ 
    ("Student Name", "@studs"), 
    ("Access Count", "@height"), 
]) 

Для значения имени студента @x и @studs оба работают. Но единственное, что я все еще не мог решить, это то, что, хотя я упомянул источник Source ColumnDataSource, он ничего не сделал для меня, потому что, когда я пытаюсь использовать @activities в hover.tooltips, он все равно дает мне ответ от "???". Итак, я не уверен, что это такое. И это проблема, с которой я сталкиваюсь в другой визуализации Time Series, которую я пытаюсь построить.

Смежные вопросы