散景图填充半圆

Bokeh plot filled semicircle

我想在散景中绘制一个填充的半圆来显示填充管道的模型 (https://www.engineersedge.com/fluid_flow/partially_full_pipe_flow_calculation/image003.png) where, based on user input, the water level changes. I looked at the available glyphs (https://docs.bokeh.org/en/latest/docs/reference/models/glyphs.html),但找不到合适的模型。我希望我可以填充弧形字形,但似乎不可能。

如有任何建议,我们将不胜感激。

没有内置的东西可以做到这一点。查看您链接的图表,您可以组合一个 wedge 字形(对于 "pacman" 部分)和一个补丁来填充其余部分。

from bokeh.io import show
from bokeh.plotting import figure
from math import pi, sin, cos

p = figure(match_aspect=True)
p.wedge(x=0, y=0, radius=1, start_angle=-5*pi/4, end_angle=pi/4)
p.patch(x=[0, -cos(pi/4), cos(pi/4)], y=[0, sin(pi/4), sin(pi/4)])

p.circle(0, 0, radius=1, fill_color=None, line_color="black", line_width=3)

# hack: Bokeh does not yet auto-range this odd combination well
p.rect(0, 0, 2, 2, color=None)

show(p)

如果这些需要以某种方式更新,您可能希望将其包装在一些辅助函数中以生成正确的数据值和 update ColumnDataSources for the existing glyphs。最佳做法是尽可能预先绘制一次字形,然后在需要更改时仅更新其数据源。

一些最后的说明:

  • 你需要 match_aspect=True 来确保 "pixel space" 和 "data space" 中的长宽比相同,这是确保圆实际上是圆的必要条件"data space"

  • match_aspect 要求您使用默认的自动范围。如果您设置明确的范围值,Bokeh 相信您知道您想要什么,即使这会弄乱外观。

  • 这是单个字形的奇怪组合...自动范围本身并不能很好地处理它们。我在圆圈周围添加了一个不可见的矩形来帮助它。