fromnumpyimportcos,linspace,pi,sinfrombokeh.core.enumsimportLegendLocationfrombokeh.ioimportshowfrombokeh.modelsimport(Circle,ColumnDataSource,DataRange1d,Legend,Line,LinearAxis,PanTool,Plot,SaveTool,WheelZoomTool)x=linspace(-2*pi,2*pi,400)y=sin(x)y2=cos(x)source=ColumnDataSource(data=dict(x=x,y=y,y2=y2))xdr=DataRange1d()ydr=DataRange1d()plot=Plot(x_range=xdr,y_range=ydr,width=1000,height=600,min_border=0,toolbar_location=None,background_fill_color='#F0F0F0',border_fill_color='lightgray',)line_glyph=Line(x="x",y="y",line_color="navy",line_width=2,line_dash="dashed")line=plot.add_glyph(source,line_glyph)circle=Circle(x="x",y="y2",size=6,line_color="red",fill_color="orange",fill_alpha=0.6)circle=plot.add_glyph(source,circle)pan=PanTool()wheel_zoom=WheelZoomTool()preview_save=SaveTool()plot.add_tools(pan,wheel_zoom,preview_save)# Add axes (Note it's important to add these before adding legends in side panels)plot.add_layout(LinearAxis(),'below')plot.add_layout(LinearAxis(),'left')plot.add_layout(LinearAxis(),'right')defadd_legend(location,orientation,side):legend=Legend(# TODO: titleitems=[("line",[line]),("circle",[circle])],location=location,orientation=orientation,border_line_color="black",title='Example Title')plot.add_layout(legend,side)# Add legends in names positions e.g. 'top_right', 'top_left' (see plot for all)forlocationinLegendLocation:add_legend(location,"vertical","center")# Add legend at fixed positionsadd_legend((150,50),"horizontal","center")# Add legend in side panelsadd_legend("center_left","horizontal","above")add_legend("center","horizontal","below")add_legend("center","vertical","left")add_legend("bottom_center","vertical","right")show(plot)