Einbau einer geschlossenen Kurve zu einer Reihe von Punkten

Habe ich eine Reihe von Punkten pts die form einer Schleife und es sieht wie folgt aus:

Einbau einer geschlossenen Kurve zu einer Reihe von Punkten

Dies ist etwas ähnlich wie Eins und dreißig Millionen zwei hundert drei und vierzig tausend zwei, aber anstatt Punkte in zwischen Paaren von Punkten, ich möchte fit eine glatte Kurve durch die Punkte (Koordinaten am Ende der Frage), so habe ich versucht, etwas ähnliches zu scipy Dokumentation auf Interpolation:

values = pts
tck = interpolate.splrep(values[:,0], values[:,1], s=1)
xnew = np.arange(2,7,0.01)
ynew = interpolate.splev(xnew, tck, der=0)

aber ich bekomme diese Fehlermeldung:

ValueError: Error on input-Daten

Gibt es eine Möglichkeit zu finden, wie eine fit?

Koordinaten der Punkte:

pts = array([[ 6.55525 ,  3.05472 ],
   [ 6.17284 ,  2.802609],
   [ 5.53946 ,  2.649209],
   [ 4.93053 ,  2.444444],
   [ 4.32544 ,  2.318749],
   [ 3.90982 ,  2.2875  ],
   [ 3.51294 ,  2.221875],
   [ 3.09107 ,  2.29375 ],
   [ 2.64013 ,  2.4375  ],
   [ 2.275444,  2.653124],
   [ 2.137945,  3.26562 ],
   [ 2.15982 ,  3.84375 ],
   [ 2.20982 ,  4.31562 ],
   [ 2.334704,  4.87873 ],
   [ 2.314264,  5.5047  ],
   [ 2.311709,  5.9135  ],
   [ 2.29638 ,  6.42961 ],
   [ 2.619374,  6.75021 ],
   [ 3.32448 ,  6.66353 ],
   [ 3.31582 ,  5.68866 ],
   [ 3.35159 ,  5.17255 ],
   [ 3.48482 ,  4.73125 ],
   [ 3.70669 ,  4.51875 ],
   [ 4.23639 ,  4.58968 ],
   [ 4.39592 ,  4.94615 ],
   [ 4.33527 ,  5.33862 ],
   [ 3.95968 ,  5.61967 ],
   [ 3.56366 ,  5.73976 ],
   [ 3.78818 ,  6.55292 ],
   [ 4.27712 ,  6.8283  ],
   [ 4.89532 ,  6.78615 ],
   [ 5.35334 ,  6.72433 ],
   [ 5.71583 ,  6.54449 ],
   [ 6.13452 ,  6.46019 ],
   [ 6.54478 ,  6.26068 ],
   [ 6.7873  ,  5.74615 ],
   [ 6.64086 ,  5.25269 ],
   [ 6.45649 ,  4.86206 ],
   [ 6.41586 ,  4.46519 ],
   [ 5.44711 ,  4.26519 ],
   [ 5.04087 ,  4.10581 ],
   [ 4.70013 ,  3.67405 ],
   [ 4.83482 ,  3.4375  ],
   [ 5.34086 ,  3.43394 ],
   [ 5.76392 ,  3.55156 ],
   [ 6.37056 ,  3.8778  ],
   [ 6.53116 ,  3.47228 ]])
Sind Sie bereit, ein neues Paket installieren/Rahmen? Wenn Sie sind die Art der Armatur, die Sie sprechen, ist durch die ROOT-Framework sowie eine Vielzahl weiterer Ausstattungsoptionen. Es sollte ziemlich einfach, sich die 2D Histogramm Beispiel passen Ihre Daten in PyROOT(die python-Schnittstelle zu ROOT, die benutzt python-syntax statt der C++ - interpreter). Ob das etwas ist, dass Sie nicht gegen ich kann nach einer richtigen Antwort und dem Beispiel.
Vielen Dank für Ihren Kommentar. Ich bin nicht dagegen, die Installation eines neuen Pakets, obwohl meine Sorge ist, dass die Ausgabe kann verwendet werden matplotlib (ich habe ein paar Bilder gemacht und würde gerne immer den gleichen Stil in diesem).
Das hat anscheinend schon ein Problem für jemand anderen, wie es war ein post über die Verwendung von matplotlib w/ ROOT. ROOT ist ein sehr mächtiges Werkzeug und ich würde empfehlen, Sie versuchen es, es gibt eine Menge toller features zur Datenanalyse und-Visualisierung.
Eigentlich im ROOT nicht brauchen, um die Nutzung der fitting-Bibliotheken, die regelmäßige Zeichnung-Optionen sind ausreichend, um eine glatte Kurve. Ich lese die Daten aus und zog es mit der C++ - interpreter wenn Sie möchten, um zu sehen, die Ergebnisse, die ich posten kann, den code und die Bilder als Antwort.
Während ich bezweifle nicht, dass ROOT ist erstaunlich für Teilchen-Daten-Analyse, es ist völlig übertrieben für die Aufgabe zur hand, das kann einfach erreicht werden mit Scipy. Aber, ich nehme auch an, man kann immer Spaß haben mit build-Anweisungen (Schritt 1, Schritt 2) . Vor allem, wenn Sie möchten, kombinieren Sie dieses mit einige wissenschaftliche python-distribution (z.B. Anaconda, EPD) auf Windows, kann dies wahrscheinlich halten Sie beschäftigt für ein paar Tage (der Lektüre des 600-Seiten manual nicht im Lieferumfang enthalten) ...

InformationsquelleAutor Mahdi | 2015-07-16

Schreibe einen Kommentar