Bokeh RuntimeError, как добавить всплывающие подсказки к графику? - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь добавить всплывающие подсказки к графику, который я сделал ранее:

enter image description here

На оси абсцисс находятся позиции маркеров, на оси ординат содержатся позиции генов. Подсказки в данный момент пусты

Но когда я пытаюсь добавить их, я получаю RuntimeError.

Для построения графика я использую df, который содержит маркер и координаты гена (соответственно xmar и xgen) и значения LOD. Эти три столбца взяты из трех отдельных списков (xmar, ygen и value):

DFvalue = pd.DataFrame({'xmar':xmar, 'ygen':ygen, 'value':value})

   xmar  ygen     value
0     0   402  5.075381
1     0   708  4.619449
2     1   489  3.817142
3     1   652  4.396806
4     2   500  3.662211

и иметь другой файл с именами вместо координат (для ссылки на всплывающие подсказки?). Этот df снова состоит из трех списков (marname, genname и value):

DFname = pd.DataFrame({'xname':marname, 'yname':genname, 'value':value})

      xname      yname     value
0  c1_00593  AT1G05430  5.075381
1  c1_00593  AT1G05900  4.619449
2  c1_00600  AT1G07790  3.817142
3  c1_00600  AT1G08230  4.396806
4  c1_00789  AT1G08920  3.662211

Мой код самого графика выглядит следующим образом, и я думаю, что с ColumnDataSource() что-то не так, но я не понимаю, почему и как?

TOOLS= "hover,pan,wheel_zoom,zoom_in,zoom_out,box_zoom,undo,redo,reset,save"
SOURCE = ColumnDataSource(DFvalue)
TOOLTIPS = [
    ('gene', '@genname'),
    ('marker', '@marname'),
    ('LOD score', '@value')
]

 #Create figure
 p = figure(tools=TOOLS, tooltips=TOOLTIPS)
 p.xaxis.axis_label = 'Position genes'
 p.yaxis.axis_label = 'Position markers'


 p.circle(x=xmar, y=ygen, source=SOURCE, size=6, fill_alpha=0.8)

после запуска я получаю следующую ошибку:

p.circle(x=xmar, y=ygen, source=SOURCE, size=6, fill_alpha=0.8)
File "fakesource", line 5, in circle
File "C:\Anaconda3\lib\site-packages\bokeh\plotting\helpers.py", line 757, in func
raise RuntimeError(_GLYPH_SOURCE_MSG % nice_join(incompatible_literal_spec_values, 
conjuction="and"))
RuntimeError: 

Expected x and y to reference fields in the supplied data source.

When a 'source' argument is passed to a glyph method, values that are sequences
(like lists or arrays) must come from references to data columns in the source.

For instance, as an example:

source = ColumnDataSource(data=dict(x=a_list, y=an_array))

p.circle(x='x', y='y', source=source, ...) # pass column names and a source

Alternatively, *all* data sequences may be provided as literals as long as a
source is *not* provided:

p.circle(x=a_list, y=an_array, ...)  # pass actual sequences and no source

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Ваш ColumnDataSource создан из DFvalue, но вы пытаетесь получить данные всплывающей подсказки из DFname. Я думаю, если вы включите другие данные в ваш ColumnDataSource:

SOURCE = ColumnDataSource(data=dict(
    xmar=DFvalue['xmar'],
    ymar=DFvalue['ygen'],
    value=DFvalue['value']
    marname=DFname['xname']
    genname=DFname['yname']))

Вы можете указать нужные данные в TOOLTIP.

0 голосов
/ 31 октября 2018

Сообщение об ошибке содержит всю информацию об ошибке использования, а также информацию о том, как исправить вещи:

Ожидается, что x и y будут ссылаться на поля в предоставленном источнике данных.

Когда аргумент 'source' передается методу глифа, значения, которые последовательности (например, списки или массивы) должны исходить из ссылок на данные столбцы в источнике.

Например, в качестве примера:

source = ColumnDataSource (data = dict (x = a_list, y = an_array))

p.circle (x = 'x', y = 'y', source = source, ...) # передать имена столбцов и источник

В качестве альтернативы, все последовательности данных могут быть представлены в виде литералов как Пока источник не , при условии:

p.circle (x = a_list, y = an_array, ...) # передать фактические последовательности и нет источник

Вы передали source методу глифа, но вы также передали реальные списки для x=xmar и y=ygen.

p.circle(x=xmar, y=ygen, source=SOURCE, size=6, fill_alpha=0.8)

Как гласит ошибка, это недопустимо. Если вы передадите source глифу, все, что нужно для глипа, должно исходить от источника . Вы не можете смешивать и сочетать. Таким образом, вы должны поместить xmar и ygen в качестве столбцов в ColumnDataSource, затем настроить x и y для использования этих столбцов:

p.circle(x='xmar', y='ygen', source=SOURCE, size=6, fill_alpha=0.8)

Вы можете добавить эти столбцы "вручную" в словарь source.data, или вы можете добавить столбцы в свой фрейм данных перед вызовом ColumnDataSource(DFvalue)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...