Seite 1 von 1

multiple xy-Diagramme mit pylab.plot

Verfasst: Sonntag 25. Juli 2010, 01:25
von p90
Hi,
habe folgendes Problem.
hab eine Liste von Messpunkten dieser Art:
log = [[name, array([pos_x,pos_y]),array([speed_x,speed_y]), mass],......]
Möchte nun für jeden "name" ein xy-Diagramm zeichnen, aber im selben Diagramm.
versuche es gerade hiermit:

Code: Alles auswählen

def pylplot(log):
    collector = collections.defaultdict(list)
    k=[]
    for entry in log:
        collector[entry[0]].append(entry[1])
    for z in collector.iteritems():
        k.append(z[1])
    print k
    pylab.plot(k[0],k[1])
    pylab.show()
    return "plot finished"
Konnte bisher mit verschiedenen anderen Codealternativen bereits Sinuskurven raus bekommen (simuliere gerade eine Kreisbahn des Mondes um die Erde), habe also die y Werte geplottet, aber nicht mit den entsprechenden x Werten obwohl sie da doch drin stehen.
Des weiteren möchte ich das für verschiedene "name" auch verschiedene Farben verwendet werden (was ich gerade nicht mache um es erst mal überhaupt ans laufen zu bekommen). Da ich aber bel. viele "name" habe weiß ich nicht wie ich diese in das plot() bekomme.
Die Doc sagt man kann schreiben: plot(x1, y1, x2, y2, usw) aber ich hab keine Ahnung wie ich eine Schleife baue die das da rein baut.
Hat jemand einen tipp?

Gn8 und bis später!

Re: multiple xy-Diagramme mit pylab.plot

Verfasst: Sonntag 25. Juli 2010, 05:42
von gkuhl
Hi,

du solltest das Problem zunächst in zwei Teilprobleme einteilen:

(1.) Strukturiere "log" so, dass du sehr einfach auf die Daten zugreifen kannst. Wenn möglich direkt beim Einlesen der Daten. Mein Vorschlag wäre bei einem defaultdict das folgende Muster:

Code: Alles auswählen

data = defaultdict(lambda: defaultdict(list))
data[name]['x'].append(posx)
data[name]['y'].append(posy)
data[name]['mass'] = 42
Du kannst auf die Elemente von "log" wie folgt zugreifen:

Code: Alles auswählen

for name, pos, speed, mass in log:
    print name, pos, speed, mass
(2.) Um die Daten jetzt zu plotten, kannst du über die Namen iterieren:

Code: Alles auswählen

import matplotlib.pyplot as plt
figure = plt.figure()
ax = fig.add_subplot(111)
for name in data:
    ax.plot(data[name]['x'], data[name]['y'])
plt.show()
Matplotlib zeichnet jede Linie in einer anderen Farbe. Willst du das selbst übernehmen kannst du mit der zip-Funktion (oder besser mit izip aus itertools) zusätzlich über eine List mit Farben iterieren und das Keyword selbst setzen.

Grüße
Gerrit

Re: multiple xy-Diagramme mit pylab.plot

Verfasst: Sonntag 25. Juli 2010, 18:27
von p90
Hi,

mit deinem Code gehts.
Vermute ich habe da bei mir irgendwie die x und y werte nicht sauber raus extrahiert.
Interessant auch das man da einfach ein

Code: Alles auswählen

ax = fig.add_subplot(111)
machen kann.

Danke schon mal!