猿问

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

我正在尝试使用创建Sankey图,bokeh并且当前正在尝试弄清楚如何填充两条Bezier曲线之间的区域。这是否可能,或者是否有任何其他方法可以实现而无需添加单个Bezier字形?


下面的示例代码-目标是用橙色填充曲线之间的区域。


from bokeh.models import Range1d, Plot, LinearAxis

from bokeh.models.glyphs import Bezier

from bokeh.io import show


plot = 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)

婷婷同学_
浏览 161回答 1
1回答

千万里不及你

从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_stddf['upper'] = df.y_mean + df.y_stdsource = 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)可能可以考虑添加一个更通用的波段,该波段可以由诸如贝塞尔曲线之类的东西指定。
随时随地看视频慕课网APP

相关分类

Python
我要回答