2016-12-05 2 views
-1

Ich habe ein Python-Wörterbuch, das für jede Variable ein Tupel mit einem Array von Punkten in der Zeit und ein Array von Zahlen (1/0) enthält, die die booleschen Werte repräsentieren, an denen die Variable hält zu einem bestimmten Zeitpunkt. Zum Beispiel:Python: Plot Schrittfunktion für echte/falsche Signale

dictionary["a"] = ([0,1,3], [1,1,0]) 

bedeutet, dass die variable "a" sowohl auf Zeitpunkt wahr ist, 0 und 1 zum Zeitpunkt 2 "a" einen beliebigen Wert hält und an einem Punkt in 3 Zeit ist es falsch.

Ich möchte ein Grundstück erzeugen matplotlib.pyplot verwenden, die irgendwie wie folgt aussehen: enter image description here Ich habe bereits versucht, so etwas wie:

import matplotlib.pyplot as plt 
plt.figure(1) 
graphcount = 1 
for x in dictionary: 
    plt.subplot(len(dictionary), 1, graphcount) 
    plt.step(dictionary[x][0], dictionary[x][1]) 
    plt.xlabel("time") 
    plt.ylabel(x) 
    graphcount += 1 
plt.show() 

aber es hat mir nicht die richtigen Ergebnisse. Wenn beispielsweise dictionary["a"] = ([2], [1]) überhaupt keine Zeile angezeigt wird. Kann mir bitte jemand zeigen, wie das geht? Vielen Dank!

+0

Haben Sie für jede Variable ein separates Grundstück wollen, oder alle Parzellen auf den Linien auf der gleichen Figur? – Ali

Antwort

0

Entsprechend Ihrer Beschreibung sollte die Linie am ersten Punkt beginnen und am letzten Punkt enden. Wenn der erste und der letzte Punkt identisch sind, wird Ihre Linie nur aus einem Punkt bestehen. Um eine Linie mit nur einem Punkt zu sehen, müssen Sie einen sichtbaren Marker verwenden.

In Bezug auf die Lage der Sprünge, die docstring sagt:

wo: [ ‚pre‘ | 'Post' | 'Mitte']

Wenn 'vor' (der Standardwert), hat das Intervall von x [i] zu x [i + 1] die Ebene y [i + 1].

Bei 'post' hat dieses Intervall die Ebene y [i].

Wenn 'Mitte', treten die Sprünge in y auf halbem Weg zwischen den x-Werten auf.

Also ich denke, Sie wollen 'mid'.

dictionary = {} 
dictionary['a'] = ([0,1,3], [1,1,0]) 
dictionary['b'] = ([2], [1]) 

plt.figure(1) 
graphcount = 1 
for x in dictionary: 
    plt.subplot(len(dictionary), 1, graphcount) 
    plt.step(dictionary[x][0], dictionary[x][1], 'o-', where='mid') 
    plt.xlabel("time") 
    plt.ylabel(x) 
    graphcount += 1 
plt.show() 

step_mid

+0

Danke - das hilft schon. Ich möchte jedoch, dass die Linie über den gesamten Zeitrahmen hinweg fortgesetzt wird. Daher möchte ich nicht nur einen Punkt für die Variable "b" haben, sondern ein kontinuierliches falsches Signal haben. Ich denke, mein Beispiel wurde für diesen Fall nicht gut gewählt. Auch für die Variable "a" an Ihrem Beispiel ist nicht klar, ob a an Punkt 1 wahr oder falsch ist. Deshalb möchte ich, dass die Schritte immer zwischen ganzen Zeitpunkten liegen, also bei 0,5, 1,5, 2,5 und so weiter auf. Wie mache ich das? –

+0

Es ist nicht klar, was Sie mit "den ganzen Zeitrahmen" meinen. Sie haben nur einen Punkt für "b" angegeben. Wie könnte das Programm also den Zeitrahmen erraten? Bitte klären Sie dies in der Frage. Siehe meine Bearbeitung über den Ort der Schritte. – Goyo