检查对象是否可见(使用当前xlim / ylim)

时间:2019-06-14 15:21:08

标签: python matplotlib

我需要创建一个箱线图,以便放大某些部分以显示相关细节。现在,我想为不在视野范围内的每个框绘制一个箭头。

是否有一些自动方法可以遍历这些框并检查它们是否当前可见?

我知道我可以使用以下方法获取所有包装盒数据

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 个答案:

答案 0 :(得分:1)

默认情况下,plt.boxplot()返回Box2和晶须的Line2D艺术家。您可以使用Line2D.get_{x|y}data()获取Line2D点的坐标。因此,您可以轻松地测试这些点是否在轴的界限之间。

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()))

您必须自己决定是仅将部分箱形图可见,还是将须线的一部分视为“可见”。