ich habe versucht eine Punktwolke mit Hilfe einer konvexen Hülle zu umschließen.
Leider liegen nicht alle Punkte innerhalb der Hülle,
Könnt ihr mir helfen?
Hier ein Beispiel:
Code: Alles auswählen
import matplotlib.pyplot as plt
import numpy as np
from scipy.spatial import ConvexHull
xdata = np.array([1.50000000e-01, 2.90000000e-01, 4.20000000e-01, 5.10000000e-01,
5.80000000e-01, 8.00000000e-01, 1.03000000e+00, 1.40000000e+00,
1.59000000e+00, 1.60000000e+00, 2.05000000e+00, 2.40000000e+00,
2.70000000e+00, 3.20000000e+00, 3.80000000e+00, 4.10000000e+00,
4.90000000e+00, 4.90000000e+00, 5.30000000e+00, 7.50000000e+00,
7.60000000e+00, 9.10000000e+00, 9.80000000e+00, 1.00000000e+01,
1.06000000e+01, 1.09000000e+01, 1.33000000e+01, 1.42000000e+01,
1.42000000e+01, 1.48000000e+01, 1.54000000e+01, 1.55000000e+01,
1.78000000e+01, 1.99000000e+01, 1.99000000e+01, 2.16000000e+01,
2.20000000e+01, 2.38000000e+01, 2.58000000e+01, 2.60000000e+01,
3.00000000e+01, 3.09000000e+01, 3.10000000e+01, 3.48000000e+01,
3.48000000e+01, 3.55000000e+01, 4.09000000e+01, 4.39000000e+01,
4.77000000e+01, 4.79000000e+01, 5.20000000e+01, 6.00000000e+01,
6.20000000e+01, 6.60000000e+01, 6.70000000e+01, 6.90000000e+01,
7.80000000e+01, 8.30000000e+01, 9.00000000e+01, 9.00000000e+01,
1.04000000e+02, 1.19000000e+02, 1.21000000e+02, 1.32000000e+02,
1.36000000e+02, 1.39000000e+02, 1.39000000e+02, 1.56000000e+02,
1.58000000e+02, 1.65000000e+02, 1.67000000e+02, 1.80000000e+02,
1.90000000e+02, 1.97000000e+02, 2.09000000e+02, 2.25000000e+02,
2.40000000e+02, 2.50000000e+02, 2.52000000e+02, 2.57000000e+02,
2.63000000e+02, 2.78000000e+02, 2.92000000e+02, 3.13000000e+02,
3.19000000e+02, 3.29000000e+02, 3.80000000e+02, 3.90000000e+02,
3.96000000e+02, 3.98000000e+02, 4.17000000e+02, 4.61000000e+02,
4.81000000e+02, 4.96000000e+02, 5.04000000e+02, 5.27000000e+02,
5.48000000e+02, 5.55000000e+02, 5.57000000e+02, 5.69000000e+02,
5.77000000e+02, 6.04000000e+02, 6.34000000e+02, 6.41000000e+02,
6.93000000e+02, 7.10000000e+02, 7.67000000e+02, 8.30000000e+02,
8.78000000e+02, 9.68000000e+02, 9.73000000e+02, 1.00700000e+03,
1.09700000e+03, 1.11000000e+03, 1.15500000e+03, 1.20800000e+03,
1.23600000e+03, 1.36600000e+03, 1.42100000e+03, 1.49000000e+03,
1.52300000e+03, 1.64800000e+03, 1.76100000e+03, 1.76100000e+03,
2.00500000e+03, 2.01300000e+03, 2.18100000e+03, 2.24600000e+03,
2.74000000e+03, 3.29500000e+03, 3.83700000e+03, 4.36200000e+03])
ydata = np.array([2.72707696, 2.63617439, 2.54527183, 2.45211548, 2.63617439,
3.84645565, 2.47615583, 3.05305409, 2.54827687, 3.84645565,
2.46413565, 3.84645565, 2.94401644, 3.84645565, 4.73168929,
2.98036232, 4.1887902, 4.71190817, 2.88949762, 4.66943022,
5.23254529, 7.15293505, 4.71190817, 4.27427572, 4.39964092,
5.63676707, 7.03331773, 4.04631435, 4.55163919, 4.60717115,
5.4294562, 5.33581921, 6.99572768, 4.25290434, 4.78402922,
4.95714817, 5.68848053, 7.03998354, 6.75991664, 6.87467146,
5.49979457, 5.44708431, 5.33581921, 5.55440859, 5.99876128,
6.97607676, 7.20959136, 5.67555216, 7.05477342, 5.62924139,
6.87467146, 5.49979457, 5.46471241, 8.43869703, 6.60614702,
5.50652576, 7.6992562, 5.60748354, 5.49979457, 6.65544662,
5.53312733, 7.03998354, 5.54562619, 8.43869703, 6.70474623,
7.98685649, 5.54642812, 7.6992562, 5.79311695, 5.57370352,
5.33095537, 5.49979457, 8.96209787, 8.39607735, 5.55972891,
5.89263704, 7.89667302, 5.63000355, 9.13127276, 5.88936335,
8.40673227, 7.98685649, 8.93445391, 7.7239333, 5.3879134,
8.41312522, 8.96209787, 7.6992562, 8.43869703, 5.3777794,
7.98685649, 8.42043146, 7.91312442, 5.58496353, 9.13127276,
8.42271465, 10.84809562, 7.97249164, 7.85436942, 5.49166632,
9.07215872, 9.24042836, 7.82264171, 5.41324842, 7.96387274,
8.57566622, 9.0446435, 7.94855023, 8.9548522, 7.94581407,
9.17907497, 9.12221396, 10.85799351, 7.97249164, 9.08002021,
9.24042836, 8.95734376, 9.20468097, 8.58170542, 9.11803858,
8.97978622, 10.87449001, 8.98035007, 9.11574339, 8.76398243,
9.11768456, 10.79365718, 8.59023265, 10.84809562, 10.87119071,
10.85092359, 10.79365718])
points = np.vstack((xdata, ydata)).T
hull = ConvexHull(points)
plt.plot(points[:, 0], points[:, 1], 'o')
for simplex in hull.simplices:
plt.plot(points[simplex, 0], points[simplex, 1], 'k-')
plt.xscale("log")
plt.grid(True)
plt.show()