Мне нужно прежде всего рассчитать площадь контура в 2D плоскости.Я буду использовать сценарий, представленный в этом ответе , чтобы сделать пример того, как выглядят мои данные.Контур, который меня интересует, является самым внешним (0,020).
Теперь я должен наложить на это изображение график рассеяния так, чтобы суперпозиция выглядела следующим образом
ИТеперь мне нужно вычислить площадь любых остатков исходного контура 0,020 после того, как они были «вырезаны» новым графиком.
После вычисления площади этого разреза, я должен вычислить площадьвсе, что содержится между квадратом на следующем рисунке (с вершинами: (-2, -2), (2, -2), (2,2), (-2,2)) и графиком синего цвета:
Здесь весь код, использованный для создания графиков.
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()