2010-12-29 4 views
2

Ich bin neu in Python am Versuch, ein Diagramm basierend auf dem PyODE-Tutorial gefunden here. Ich verwende pylab für das Plotten. Unten ist der Hauptteil des Codes und #added steht für den Code, den ich hinzugefügt habe, um das Diagramm zu testen und anzuzeigen. Betrachtet man die Werte selbst, sind y und v diejenigen, die sich ändern und x,z,u,w bleiben 0.000. Wenn ich das Programm laufe, skaliert die Achsenskalierung, was bedeutet, dass etwas in Bezug auf die Werte passiert, aber keine Linie angezeigt wird. Was mache ich falsch?Plotgraph in Python

Dank

yplot = 0 #added 

#do the simulation 
total_time = 0.0 
dt = 0.04 
while total_time<2.0: 
    x,y,z = body.getPosition() 
    u,v,w = body.getLinearVel() 
    print "%1.2fsec: pos=(%6.3f,%6.3f,%6.3f) vel=(%6.3f,%6.3f,%6.3f)" % \ 
     (total_time, x,y,z,u,v,w) 
    world.step(dt) 
    total_time += dt  
    yplot += y #added 
    plot(total_time, yplot) #added 


xlabel('Time') #added 
ylabel('Height') #added 
show() #added 

Antwort

2

Der Trick ist es, alle Werte, die Sie zuerst zeichnen möchten zu akkumulieren und dann plot einmal rufen Sie einfach an.

yplot = 0 #added 

#do the simulation 
total_time = 0.0 
dt = 0.04 
times=[] 
yvals=[] 
while total_time<2.0: 
    x,y,z = body.getPosition() 
    u,v,w = body.getLinearVel() 
    print "%1.2fsec: pos=(%6.3f,%6.3f,%6.3f) vel=(%6.3f,%6.3f,%6.3f)" % \ 
     (total_time, x,y,z,u,v,w) 
    world.step(dt) 
    total_time += dt 
    yplot += y 
    times.append(total_time) 
    yvals.append(yplot) 
plot(times, yvals,'r-') 
xlabel('Time') #added 
ylabel('Height') #added 
show() #added 

Das dritte Argument plotten, 'r-' erzählt pylab eine rote Linie, die die Punkte in times, yvals aufgeführt zu ziehen. Wenn Sie Punkte nacheinander auftragen, gibt es keine Möglichkeit, pylab zu verbinden, um die Punkte zu verbinden, da jedes Diagramm nur einen einzigen Punkt enthält. Der Aufruf von plot für jeden Punkt ist ebenfalls sehr ineffizient.

+0

Vielen Dank, das ist es behoben! – keyboardP