Python 绘制包含80%(x,y)个点的圆

Python 绘制包含80%(x,y)个点的圆,python,plot,multidimensional-array,Python,Plot,Multidimensional Array,我有一个点的2d数组x,y,我想画一个包含80%的点的圆,并且我想知道结果圆的半径。有没有办法用python实现这一点 我一直在寻找一种方法,但没有成功。我为没有尝试而道歉,但我完全迷失了在不给圆一个半径的情况下获取80%的条件 更新: 我尝试了以下方法: import matplotlib.pyplot as plt x=[1, 1.15, 1.23, 0.92, 1.31, 1.18, 1.27, 1.07, 3, 3.2] y=[1.17, 0.95, 1.04, 1.32, 1, 1

我有一个点的2d数组x,y,我想画一个包含80%的点的圆,并且我想知道结果圆的半径。有没有办法用python实现这一点

我一直在寻找一种方法,但没有成功。我为没有尝试而道歉,但我完全迷失了在不给圆一个半径的情况下获取80%的条件

更新:

我尝试了以下方法:

import matplotlib.pyplot as plt

x=[1, 1.15, 1.23, 0.92, 1.31, 1.18, 1.27, 1.07, 3, 3.2]

y=[1.17, 0.95, 1.04, 1.32, 1, 1.22, 1.28, 0.99, 1, 1.2]

plt.plot(x, y, 'bo')
circle=plt.Circle((1.1, 1.12), 0.2, color='g', fill=False)
fig = plt.gcf()
fig.gca().add_artist(circle)
plt.axis([0, 3.5, 0, 3.5])
plt.show()
这是我想得到的图:


在这个例子中,我有10个点,圆圈是最小的圆圈,里面有8个点。我已经用眼睛做了这个例子,但我想要的是:给定x和y,得到圆的参数,中心位置和半径,匹配至少80%的点在其中的条件,即,如何成为包含至少80%点的最小圆。这可能吗

你问的更多的是算法问题,而不是python问题。我要说的是,这个方案远不是最佳方案,但它可能会帮助你走上正确的道路

你可以考虑随机搜索。选择一个随机点,并以该点为中心绘制一些随机半径的圆。计算圆中的点数并选择最佳点


你选择了多少点,画了多少圈,半径是多少取决于你。你尝试得越多,就越有可能在不超过80%的情况下接近80%。如果没有一些初步的数据探索,我不可能推荐任何值。您尝试的次数越多,计算成本就会越高。这完全取决于尽可能接近80%这个数字的重要性。

正如其他人所说,你可以画许多不同的圆圈来获得要求的结果。但一个快速而肮脏的方法可能是:

import numpy as np
import matplotlib.pyplot as plt

# generate some random points
n = 1000
x = 4 * np.random.randn(n) + 15
y = 2 * np.random.randn(n) + 10

# somehow compute center of cloud, use e.g. medium or mean
x0 = np.median(x)
y0 = np.median(y)

# compute radius
r = np.sqrt((x - x0)**2 + (y - y0)**2)
t = 80 # percent
r0 = np.percentile(r, t)
n_within = (r < r0).sum()

# make plot    
plt.plot(x, y, '.')
circle = plt.Circle((x0, y0), r0, color='r', fill=False)
plt.gca().add_artist(circle)
plt.title('Found center at ({:.2f}, {:.2f})\n'
          '{}% radius is {:.2f}\n'
          '{} / {} points within circle'.format(
          x0, y0, t, r0, n_within, n))
plt.axis([0, 30, 0, 20])
plt.show()
结果:


因为您只是想删除外围点,所以这应该是可行的,但可能会对不寻常的数据做一些奇怪的事情

快n脏:

对于数据集中的每个点,计算从数据集中的每个点到该点的平均距离。 选择平均距离最小的点作为圆的中心。 取距离中心最远点的距离,并称之为半径。 缩小半径,直到圆内的点少于80%。 备选方案:

对于数据集中的每个点,计算从数据集中的每个点到该点的平均距离。存储此数字,然后根据其对点进行排序。 从该列表中删除前20%。 围绕其余点拟合一个圆。
圆圈的中心是固定的,还是你也需要确定它?@user2871248:你是在寻找至少80%,最多80%,正好80%,尽可能接近上方80%的距离吗?从下面?等等?@user2871248至少-80%只需在所有点周围画一个圆……恕我直言,满足上述条件的圆是无限的。必须定义更多的标准。这样的圆仍然是无限的。不含糊的解决方案需要更多的标准。你可以对圆周围的每个点做一个轮廓积分,并计算dTheta。如果一个点在圆中,轮廓积分将根据积分方向计算为+/-2pi,否则为零