ВЫПУСК № 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)
Результат выше:
Визуальный эффект является более или менее тем, что я имел в виду, однако тот факт, что вертикальные линии строятся с использованием цикла for, создает проблемы с виджетами, а именно: флажки реагируют только на квадрати обведите кружком.
Я полагаю, это из-за того, что строки vert строятся без аргумента источника, поэтому отправка изменений с помощью обратного вызова JS не обновляет данные для них (источником является ColumDataSource из кадра данных pandas). Я не смогпостроить их так, как они используют исходный аргумент.
ВЫПУСК № 2: при условии, что я отбросил цикл for, я не могу управлять размещением текста
Любые предложения, пожалуйста?