在数据点

时间:2015-05-08 14:50:07

标签: python matplotlib graph scatter

我有一个问题/想法,我不知道该怎么做。

我有X与Y的散点图

scatter plot example

我可以绘制一个矩形,然后选择其中的所有点。

理想情况下,我想定义一个椭圆,因为它可以更好地捕捉形状并排除其外的所有点。

如何做到这一点?它甚至可能吗?我使用matplotlib绘制了图。

我使用线性回归(LR)来拟合点,但这并不是我想要的。 我想定义一个椭圆,以便在其中覆盖尽可能多的点,然后排除它外面的点。如何定义一个方程式/代码来挑选内部的方程式?

1 个答案:

答案 0 :(得分:0)

如果您拥有图表中表示的数据结构,则可以使用函数和列表推导来完成此操作。

如果你有这样的列表中的数据:

# Made up data
lst = [
    # First element is X, second is Y.
    (0,0),
    (92,20),
    (10,0),
    (13,40),
    (27,31),
    (.5,.5),
]

def shape_bounds(x):
    """
    Function that returns lower and upper bounds for y based on x

    Using a circle as an example here.
    """
    r = 4
    # A circle is x**2 + y**2 = r**2, r = radius
    if -r <= x <= r:
        y = sqrt(r**2-x**2)
        return -y, y
    else:
        return 1, -1 # Remember, returns lower, upper.  
        # This will fail any lower < x < upper test.        

def in_shape(elt):
    """
    Unpacks a pair and tests if y is inside the shape bounds given by x
    """
    x, y = elt
    lower_bound, upper_bound = shape_bounds(x)
    if lower_bound < y < upper_bound:
        return True
    else:
        return False

# Demo walkthrough
for elt in lst:
    x, y = elt
    print x, y
    lower_bound, upper_bound = shape_bounds(x)
    if lower_bound < y < upper_bound:
        print "X: {0}, Y: {1} is in the circle".format(x, y)

# New list of only points inside the shape
new_lst = [x for x in lst if in_shape(x)]

对于椭圆,请尝试根据this

更改形状方程