frombokeh.modelsimportColumnDataSource,Whiskerfrombokeh.plottingimportfigure,showfrombokeh.sampledata.autompg2importautompg2asdffrombokeh.transformimportfactor_cmap,jitterclasses=list(sorted(df["class"].unique()))p=figure(height=400,x_range=classes,background_fill_color="#efefef",title="Car class vs HWY mpg with quintile ranges")p.xgrid.grid_line_color=Noneg=df.groupby("class")upper=g.hwy.quantile(0.80)lower=g.hwy.quantile(0.20)source=ColumnDataSource(data=dict(base=classes,upper=upper,lower=lower))error=Whisker(base="base",upper="upper",lower="lower",source=source,level="annotation",line_width=2)error.upper_head.size=20error.lower_head.size=20p.add_layout(error)p.circle(jitter("class",0.3,range=p.x_range),"hwy",source=df,alpha=0.5,size=13,line_color="white",color=factor_cmap("class","Light6",classes))show(p)