Вы можете использовать этот код (частично взят из astroML.plotting.tools
): он принимает два обязательных параметра: среднее (то есть центр каждого эллипса KMean) и соответствующую ковариацию.Он создает набор эллипсов разных масштабов (по умолчанию один связан с ковариационной матрицей, один в два раза больше, а дерево в два раза больше);он принимает аргументы, которые передаются непосредственно в подпрограммы matplotlib
.
from matplotlib import pyplos as plt
def draw_ellipse(mu, C, scales=[1, 2, 3], ax=None, **kwargs):
from matplotlib.patches import Ellipse
if ax is None:
ax = plt.gca()
# find principal components and rotation angle of ellipse
sigma_x2 = C[0, 0]
sigma_y2 = C[1, 1]
sigma_xy = C[0, 1]
alpha = 0.5 * np.arctan2(2 * sigma_xy,
(sigma_x2 - sigma_y2))
tmp1 = 0.5 * (sigma_x2 + sigma_y2)
tmp2 = np.sqrt(0.25 * (sigma_x2 - sigma_y2) ** 2 + sigma_xy ** 2)
sigma1 = np.sqrt(tmp1 + tmp2)
sigma2 = np.sqrt(tmp1 - tmp2)
for scale in scales:
ax.add_patch(Ellipse((mu[0], mu[1]),
2 * scale * sigma1, 2 * scale * sigma2,
alpha * 180. / np.pi,
**kwargs))
Вы можете передать ему такие параметры, как цвет заливки fc='blue'
или альфа-прозрачность: например,
draw_ellipse(mean, covariance_matrix, scales=[2], ax=ax,
ec='k', fc='white', alpha=0.2)