Боке: Как добавить вертикальные линии, соединяющие точки - PullRequest
1 голос
/ 25 апреля 2019

У меня есть 2 столбца с одинаковыми значениями оси X, которые я хочу соединить вертикальными линиями. Это желаемый эффект:

enter image description here

Мне удалось реализовать это в matplotlib:

for i, row in df.iterrows():
         ax.plot([row['x']]*2, row[['y1', 'y2']], color='grey', lw=1, zorder=0, alpha=0.5)

Как мне этого добиться в Боке?

df = pd.DataFrame(np.random.normal(0, 5, (10, 2)), columns=['x','y'])
df_2 = df.copy()
df_2['y'] = df_2['y'] - 5
source = ColumnDataSource(df)
source_2 = ColumnDataSource(df_2)
myplot = figure(plot_width=600, plot_height=400, tools='hover,box_zoom,box_select,crosshair,reset')
myplot.circle('x', 'y', size=7, fill_alpha=0.5, source=source)
myplot.circle('x', 'y', size=7, fill_alpha=0.5, color='orange', source=source_2)
show(myplot, notebook_handle=True);

Результат кода Bokeh:

enter image description here

Пример базовых данных: Y2 всегда будет больше, чем Y1.

enter image description here

1 Ответ

1 голос
/ 25 апреля 2019

Вы должны использовать segment метод глифа:

from bokeh.plotting import figure, show

x  = [1, 2, 3, 4, 5]
y1 = [6, 7, 2, 4, 5]
y2 = [10, 12, 11, 14, 13]

p = figure(plot_height=350)

p.segment(x, y1, x, y2, color="lightgrey", line_width=3)
p.circle(x, y1, color="blue", size=20)
p.circle(x, y2, color="red", size=20)

show(p)

enter image description here

Этот код передает данные непосредственно в методы глифов, но также было бы разумно поместить все в один ColumnDataSource, который будет использоваться для всех глифов.

...