为了账号安全,请及时绑定邮箱和手机立即绑定

散景中Bezier曲线之间的填充区域

散景中Bezier曲线之间的填充区域

婷婷同学_ 2021-03-29 21:09:26
我正在尝试使用创建Sankey图,bokeh并且当前正在尝试弄清楚如何填充两条Bezier曲线之间的区域。这是否可能,或者是否有任何其他方法可以实现而无需添加单个Bezier字形?下面的示例代码-目标是用橙色填充曲线之间的区域。from bokeh.models import Range1d, Plot, LinearAxisfrom bokeh.models.glyphs import Bezierfrom bokeh.io import showplot = Plot(title=None, x_range=Range1d(0, 1), y_range=Range1d(-1, 1), plot_width=300, plot_height=300)glyph = Bezier(x0=0, y0=0, x1=1, y1=1, cx0=0.5, cy0=0.01, cx1=0.5, cy1=0.99, line_color="orange", line_width=2)glyph2 = Bezier(x0=0, y0=-1, x1=1, y1=0.5, cx0=0.5, cy0=-0.99, cx1=0.5, cy1=0.49, line_color="orange", line_width=2)g1 = plot.add_glyph(glyph)g2 = plot.add_glyph(glyph2)xaxis = LinearAxis()plot.add_layout(xaxis, 'below')yaxis = LinearAxis()plot.add_layout(yaxis, 'left')show(plot)
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

从Bokeh开始0.13.0,无法使用任何内置功能在两条Bézier曲线之间填充。当前,要实现此目的,您将必须编写某种自定义扩展类,该类使用输入数据并绘制曲线并使用HTML Canvas JavaScript API进行填充。


否则,如果能够将曲线表示为明确的折线而不是Bézier曲线,则下一个最接近的东西是Band注释。假设数据框包含x,,y_mean和y_std,您可以执行以下操作:


df['lower'] = df.y_mean - df.y_std

df['upper'] = df.y_mean + df.y_std


source = ColumnDataSource(df.reset_index())


band = Band(base='x', lower='lower', upper='upper', source=source, 

            level='underlay', fill_alpha=1.0, line_width=1, line_color='black')

p.add_layout(band)

//img1.sycdn.imooc.com//6070109900010edc09150941.jpg

可能可以考虑添加一个更通用的波段,该波段可以由诸如贝塞尔曲线之类的东西指定。

查看完整回答
反对 回复 2021-04-09
  • 1 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信