Боке участок закрашен полукругом

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

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


person V6AULtxAdP    schedule 03.10.2019    source источник


Ответы (1)


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

введите здесь описание изображения

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

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

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

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

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

person bigreddot    schedule 03.10.2019