Проверьте, виден ли объект (с текущим xlim / ylim) - PullRequest
0 голосов
/ 14 июня 2019

Я создаю блокпост, где мне нужно увеличить какую-то часть, чтобы показать соответствующие детали. Теперь я хочу нарисовать стрелку для каждого поля, находящегося вне поля зрения.

Есть ли какой-нибудь автоматический способ перебирать поля и проверять, видны ли они в данный момент?

Я знаю, что могу получить все данные коробки с

bp = plt.boxplot([[2, 3], [0, 1]])
plt.ylim([-1, 2])  # first box not visible

# all boxes
print(bp['boxes'])

# all whiskers
print(bp['fliers'])

но как я могу проверить, видны ли они в данный момент?

1 Ответ

1 голос
/ 15 июня 2019

По умолчанию plt.boxplot() возвращает художников Line2D для коробок и усов. Вы можете получить координаты точек Line2D, используя Line2D.get_{x|y}data(). Поэтому вы можете легко проверить, находятся ли точки между границами осей.

def is_visible(line, xmin, xmax, ymin, ymax):
    x,y = line.get_data()
    return (x.max()>xmin and x.min()<xmax) and (y.min()>ymin and y.max()<ymax)

for b in bp['boxes']:
    print(is_visible(b, *plt.gca().get_xlim(), *plt.gca().get_ylim()))

Вы должны решить для себя, следует ли считать «видимую» только часть боксерского участка видимой или часть видимых усов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...