我有2列,它们共享相同的x轴值,我想使用垂直线进行连接。这是理想的效果:
我能够在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);
散景代码结果:
基础数据示例:Y2始终大于Y1。
答案 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)
这段代码将数据直接传递给字形方法,但是将所有内容都放在一个ColumnDataSource
中并为所有字形共享也是明智的。