Python - вычислить площадь контура KDE - PullRequest
0 голосов
/ 21 декабря 2018

Мне нужно прежде всего рассчитать площадь контура в 2D плоскости.Я буду использовать сценарий, представленный в этом ответе , чтобы сделать пример того, как выглядят мои данные.Контур, который меня интересует, является самым внешним (0,020).enter image description here

Теперь я должен наложить на это изображение график рассеяния так, чтобы суперпозиция выглядела следующим образом enter image description here

ИТеперь мне нужно вычислить площадь любых остатков исходного контура 0,020 после того, как они были «вырезаны» новым графиком.

После вычисления площади этого разреза, я должен вычислить площадьвсе, что содержится между квадратом на следующем рисунке (с вершинами: (-2, -2), (2, -2), (2,2), (-2,2)) и графиком синего цвета:

enter image description here

Здесь весь код, использованный для создания графиков.

import numpy as np
import matplotlib.pyplot as pl
import scipy.stats as st
import matplotlib.patches as patches


np.random.seed(0)  
data = np.random.multivariate_normal((0, 0), [[0.8, 0.05], [0.05, 0.7]], 100)
x = data[:, 0]
y = data[:, 1]
xmin, xmax = -3, 3
ymin, ymax = -3, 3

# Peform the kernel density estimate
xx, yy = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([xx.ravel(), yy.ravel()])
values = np.vstack([x, y])
kernel = st.gaussian_kde(values)
f = np.reshape(kernel(positions).T, xx.shape)

fig = pl.figure()
ax = fig.gca()



ax.set_xlim(xmin, xmax)
ax.set_ylim(ymin, ymax)
# Contourf plot
cfset = ax.contourf(xx, yy, f, cmap='Blues')
## Or kernel density estimate plot instead of the contourf plot
#ax.imshow(np.rot90(f), cmap='Blues', extent=[xmin, xmax, ymin, ymax])
# Contour plot
cset = ax.contour(xx, yy, f, colors='k')
# Label plot
ax.clabel(cset, inline=1, fontsize=10)
data = np.loadtxt('forbidden_parameters', unpack=True)

ax.scatter(data[1],data[2])
ax.set_xlabel('Y1')
ax.set_ylabel('Y0')

### drwa square
ax.add_patch(patches.Rectangle((-2, -2), 4, 4, facecolor='none'))



pl.show()
...