2016-07-20 12 views
0

Also habe ich ein paar Datenpunkte gemacht und ich habe sie geplottet. Dann wollte ich seine kubische Funktion interpolieren und plotten. Als ich jedoch geplottet habe, sind nur 3 der Funktionen aufgetaucht. Wie mache ich es so, dass alle Funktionen angezeigt werden? Außerdem, wenn ich die interpolierte lineare Funktion zeichnete, zeigten sich alle Linien nett.Kubische Interpolation zeigt nicht, aber linear?

xnew = np.linspace(0.0414, 1.0414, 10000) 

z, mass1, mass2, mass3, mass4, mass5, mass6, mass7 = np.loadtxt("BHMF_bluemassfinal.dat", usecols = [0,1,2,3,4,5,6,7], unpack = True) 
axes[0].plot(z, mass1,'bo') 
axes[0].plot(z, mass2, 'bo') 
axes[0].plot(z, mass3, 'bo') 
axes[0].plot(z, mass4, 'bo') 
axes[0].plot(z, mass5, 'bo') 
axes[0].plot(z, mass6, 'bo') 
axes[0].plot(z, mass7, 'bo') 
axes[0].plot(xnew, fb1(xnew), 'k') 
axes[0].plot(xnew, fb2(xnew), 'k') 
axes[0].plot(xnew, fb3(xnew), 'k') 
axes[0].plot(xnew, fb4(xnew), 'k') 
axes[0].plot(xnew, fb5(xnew), 'k') 
axes[0].plot(xnew, fb6(xnew), 'k') 
axes[0].plot(xnew, fb7(xnew), 'k') 

z, mass1, mass2, mass3, mass4, mass5, mass6, mass7 = np.loadtxt("BHMF_greenmassfinal.dat", usecols = [0,1,2,3,4,5,6,7], unpack = True) 
axes[1].plot(z, mass1, 'go') 
axes[1].plot(z, mass2, 'go') 
axes[1].plot(z, mass3, 'go') 
axes[1].plot(z, mass4, 'go') 
axes[1].plot(z, mass5, 'go') 
axes[1].plot(z, mass6, 'go') 
axes[1].plot(z, mass7, 'go') 
axes[1].plot(xnew, fg1(xnew), 'k') 
axes[1].plot(xnew, fg2(xnew), 'k') 
axes[1].plot(xnew, fg3(xnew), 'k') 
axes[1].plot(xnew, fg4(xnew), 'k') 
axes[1].plot(xnew, fg5(xnew), 'k') 
axes[1].plot(xnew, fg6(xnew), 'k') 
axes[1].plot(xnew, fg7(xnew), 'k') 

enter image description here

+0

Von der Datei, aus der ich zeichne, gibt es ein paar NaN-Daten. Vielleicht stoppt das die Interpolation ?? –

+0

Vielleicht. Diese scheinen stellare Massen zu sein, doch du zeichnest sie als eine Funktion der Rotverschiebung auf. Wofür ist das? – Anonymous

+0

Gutes Auge. Ich plane, wie sich die Massen von supermassiven Schwarzen Löchern im Laufe der Zeit entwickeln. –

Antwort

1

Am Ende stellte ich fest, dass einige Datenpunkte waren math.nan. Sie erlaubten keine Interpolation.

Ich musste meine Hauptdatei nehmen und in verschiedene separate Dateien schneiden, wo der Rotverschiebebehälter zu meiner Massenablage passen würde. Also nahm ich math.nan weg und ich konnte die Interpolation machen.

Meine Lösung ist eine ziemlich dumme. Wenn jemand eine effizientere Lösung vorschlagen könnte, zögern Sie bitte nicht, es trotzdem zu veröffentlichen.

+0

Was meinst du mit deinem Rotverschiebebunker, der zu deinem Massenbunker passt? Ich hatte kürzlich ein ähnliches Problem, nachdem ich versucht hatte, Geschwindigkeitsdispersionen von Galaxienhaufen zu berechnen, wenn man einige Galaxie-Spezifikationsdaten verwendete. Ungefähr 3 von 60 Clustern waren mit NaN-Dispersionen am Ende, und ich löste es auch durch Binning. Es scheint jedoch übertrieben, Ihre Daten manuell in separate Dateien aufzuteilen. Ich habe nur die Rotverschiebungen mit 'numpy.histogram' zerlegt – Anonymous

+0

Ich meinte" passend ", dass es für jede Rotverschiebung eine entsprechende Masse geben würde. Für Rotverschiebungen mit einer NaN-Masse habe ich sie ausgeschnitten. Ich habe meine ursprüngliche Liste einfach geteilt und die Schnitte interpoliert. –

+0

numpy.histogram scheint wirklich interessant ... Ich bin ein bisschen verwirrt über die Syntax dafür. Wie würde ich numpy.histogram verwenden, um meine Listen zu schneiden? –