Боке сюжет заполнен полукругом - PullRequest
0 голосов
/ 04 октября 2019

Я хотел бы нарисовать заполненный полукруг в боке, чтобы показать модель заполнения трубы (https://www.engineersedge.com/fluid_flow/partially_full_pipe_flow_calculation/image003.png), где, на основании пользовательского ввода, изменяется уровень воды. Я посмотрел на доступные глифы (https://docs.bokeh.org/en/latest/docs/reference/models/glyphs.html) но не смог найти того, который сработал бы. Я надеялся, что смогу заполнить дуговой глиф, но это не представляется возможным.

Любой совет приветствуется.

1 Ответ

1 голос
/ 04 октября 2019

Нет ничего встроенного, чтобы сделать это. Глядя на диаграмму, которую вы связали, вы можете объединить глиф 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)

enter image description here

Если их нужно как-то обновить, вы, вероятно, захотите обернуть это в какую-нибудь вспомогательную функцию для генерации нужных данных. значения и обновляют ColumnDataSources для существующих глифов . Лучшая практика - рисовать глифы один раз, когда это возможно, а затем обновлять только их источники данных, если они нуждаются в изменении.

Пара заключительных замечаний:

  • вам нужно match_aspect=True, чтобы обеспечить одинаковые соотношения сторон в «пространстве пикселей» и «пространстве данных», что необходимочтобы убедиться, что круг действительно является кругом в «пространстве данных»

  • match_aspect, необходимо использовать автоматические диапазоны по умолчанию. Если вы устанавливаете явные значения диапазона, Боке доверяет вам, что вы хотите, даже если это портит аспект.

  • Это странная комбинация одиночных глифов ... автодиапазоны сами по себе не очень хороши. Я добавил невидимый прямоугольник вокруг круга, чтобы помочь ему.

...