运行以下代码段后,
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
plotted_ellipse = Ellipse((0, 0), 10, 10)
unplotted_ellipse = Ellipse((0, 0), 10, 10)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.add_patch(plotted_ellipse)
ax.set_aspect('equal')
ax.set_xlim(-10, 10)
ax.set_ylim(-10, 10)
使用contains_point
方法时,我得到以下结果
In [6]: plotted_ellipse.contains_point((0, 0))
Out[6]: False
In [7]: unplotted_ellipse.contains_point((0, 0))
Out[7]: True
这对我没有意义。这是偶然的错误吗?或者是否有一种首选方法来测试补丁对象是否包含点?
使用matplotlib
版本1.5.1
答案 0 :(得分:1)
这是因为您正在检查数据坐标中绘制的椭圆中的点,而当您将路径添加到 ax 时,其坐标将转换为显示坐标。 根据{{3}}:
<块引用>检查转换后的补丁的惯例源于这样一个事实,即该方法主要用于检查显示坐标(例如来自鼠标事件)是否在补丁内。如果你想用数据坐标做上面的检查,你必须先正确地变换它们
因此,如果您想检查数据坐标中的某个点,则必须先将其转换为显示坐标:
point = plotted_ellipse.get_transform().transform((0,0))
print(plotted_ellipse.contains_point(point))
>>> True
有关坐标系的说明,请参阅 docs。