散景:如何添加连接点的垂直线

时间:2019-04-25 16:36:35

标签: python pandas data-visualization bokeh

我有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)

如何在Bokeh中实现这一目标?

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);

散景代码结果:

enter image description here

基础数据示例:Y2始终大于Y1。

enter image description here

1 个答案:

答案 0 :(得分:1)

您应该使用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中并为所有字形共享也是明智的。