Боке: построение нескольких отдельных линий - PullRequest
0 голосов
/ 19 февраля 2019

ВЫПУСК № 1:

Я не могу придумать, как построить несколько отдельных линий, кроме этой:

main_time_line = p.line(x=(start, stop), y=(0, 0))

g1 = p.square(source=source, x='examination__date', y=0, size=4,
              color='black', name='g1')

hover_tool.renderers.append(g1)

g2 = p.circle(source=source, x='examination__date', y='level', size=15)

for i, (idate, ilevel, iname) in enumerate(zip(source.data['examination__date'],
                                               source.data['level'],
                                               source.data['examination__name'])):
    vert = 'top' if ilevel < 0 else 'bottom'
    horizontal = 'right' if ilevel < 0 else 'left'
    yoff = -10 if ilevel < 0 else 10
    p.line(x=idate, y=(0, ilevel), color='black', line_width=3)
    my_txt = Label(x=idate, 
                   y=ilevel, 
                   text=iname, 
                   text_align=horizontal,
                   text_baseline=vert, 
                   text_font_size='13px', 
                   y_offset=yoff)
    p.add_layout(my_txt)

Результат выше: enter image description here

Визуальный эффект является более или менее тем, что я имел в виду, однако тот факт, что вертикальные линии строятся с использованием цикла for, создает проблемы с виджетами, а именно: флажки реагируют только на квадрати обведите кружком.

Я полагаю, это из-за того, что строки vert строятся без аргумента источника, поэтому отправка изменений с помощью обратного вызова JS не обновляет данные для них (источником является ColumDataSource из кадра данных pandas). Я не смогпостроить их так, как они используют исходный аргумент.

ВЫПУСК № 2: при условии, что я отбросил цикл for, я не могу управлять размещением текста

Любые предложения, пожалуйста?

1 Ответ

0 голосов
/ 20 февраля 2019

Дальнейшая проверка документации привела меня к обнаружению сегментов и LabelSets, поэтому для достижения желаемого эффекта мне просто нужно было добавить список 'нулей', состоящий из 0, в ColumnDataSource.

Я уверен, что есть многодругие способы справиться с этим.

main_time_line = p.line(x=(start, stop), y=(0, 0), color='blue')

g1 = p.square(source=source, x='examination__date', y=0, size=4, 
              color='black', name='g1')

hover_tool.renderers.append(g1)

g2 = p.circle(source=source, x='examination__date', y='level', size=15)

g3 = p.segment(source=source, 
               x0='examination__date', 
               y0='zeroes',
               x1='examination__date', 
               y1='level',
               color="#F4A582", 
               line_width=3)

labels = LabelSet(x='examination__date', y='level', text='examination__name', 
                  level='glyph', x_offset=5, y_offset=5, source=source, 
                  render_mode='canvas')

p.add_layout(labels)
...