Ich habe einige Probleme mit Matplotlib, um den Pfad von etwas zu plotten. Hier ist eine grundlegende Version der Art von Dingen, die ich mache.Plottrajektorien in Python mit Matplotlib
Im Wesentlichen sehe ich, wenn der Wert einen bestimmten Schwellenwert (6 in diesem Fall) an einem beliebigen Punkt während des Pfads bricht und dann später etwas damit tun.
Jetzt habe ich 3 Listen eingerichtet. Der end_vector basiert auf den anderen beiden Listen. Wenn der Wert während einer einzelnen Simulation zweimal überschritten wird, werde ich die letzte Position des Objekts zu meinem 5 0 Simulationen hinzufügen, indem ich eine Liste von. Halte Listen. Ich werde das unten klären. Und timestep_vect
speichert den Pfad für eine einzelne Simulation.
from random import gauss
from matplotlib import pyplot as plt
import numpy as np
starting_val = 5
T = 1 #1 year
delta_t = .1 #time-step
N = int(T/delta_t) #how many points on the path looked at
trials = 5 #number of simulations
#main iterative loop
end_vect = []
trajectories_vect = []
for k in xrange(trials):
s_j = starting_val
timestep_vect = []
for j in xrange(N-1):
xi = gauss(0,1.0)
s_j *= xi
timestep_vect.append(s_j)
trajectories_vect.append(timestep_vect)
if max(timestep_vect) > 5:
end_vect.append(timestep_vect[-1])
else:
end_vect.append(0)
Okay, an dieser Stelle, wenn ich meine Bahnen zu drucken, ich so etwas wie dieses (ich gepostet nur zwei Simulationen, statt die volle 5):
[[ -3.61689976e+00 2.85839230e+00 -1.59673115e+00 6.22743522e-01
1.95127718e-02 -1.72827152e-02 1.79295788e-02 4.26807446e-02
-4.06175288e-02] [ 4.29119818e-01 4.50321728e-01 -7.62901016e-01
-8.31124346e-02 -6.40330554e-03 1.28172906e-02 -1.91664737e-02
-8.29173982e-03 4.03917926e-03]]
Dieses gut ist und was ich möchte passieren.
Jetzt ist mein Problem, dass ich nicht weiß, wie ich meinen Weg (Y-Achse) richtig gegen meine Zeit (X-Achse) zeichne.
Zuerst möchte ich meine Daten in numply Arrays setzen, weil ich sie später verwenden muss, um einige Statistiken und andere Dinge zu berechnen, die aus Erfahrung numpy sehr einfach macht.
#creating numpy arrays from list
#might need to use this with matplotlib somehow
np_trajectories = np.array(trajectories_vect)
time_array = np.arange(1,10)
Hier ist der Kern des Problems. Wenn ich meine Trajektorien (y-Achse) in matplotlib einfüge, behandelt es nicht jede "Liste" (Zeile in numpy) als einen Pfad. Anstatt 5 Pfade für 5 Simulationen zu bekommen, bekomme ich 9 Pfade für 5 Simulationen. Ich glaube, dass ich Sachen falsch eingib, deshalb benutzt es die 9 Zeitintervalle in der falschen Weise.
#matplotlib stuff
plt.plot(np_trajectories)
plt.xlabel('timestep')
plt.ylabel('trajectories')
plt.show()
Hier ist das Bild erzeugt:
Offensichtlich ist dies falsch zu dem zuvor benannten Grund. Stattdessen möchte ich 5 Pfade basierend auf den 5 Listen (Zeilen) in meinen Trajektorien haben. Ich verstehe das Problem, weiß aber nicht, wie ich es beheben soll.
Vielen Dank im Voraus für die Hilfe.
Awesome, dass es tat. Ich danke dir sehr. Nur eine schnelle Folge. Wie stelle ich sicher, dass meine X-Achse mit meinen Zeitschritten übereinstimmt? Ich möchte, dass es delta_t widerspiegelt. h., haben die Zeiträume 1-9. Und momentan tut es das nicht. – DudeWah
@DudeWah Ich habe die Antwort aktualisiert, um die Darstellung der X-Achse als eine Zeitsequenz für (was ich denke) in Ihrem Fall einzuschließen. –
Vielen Dank für die Aufklärung! – DudeWah