it-swarm.com.de

Wie zeichne ich eine Schrittfunktion mit Matplotlib in Python?

Das sollte einfach sein, aber ich habe gerade angefangen mit Matplotlib und Python zu spielen. Ich kann eine Linie oder ein Streudiagramm erstellen, aber ich bin nicht sicher, wie ich eine einfache Schrittfunktion ausführen soll. Jede Hilfe wird sehr geschätzt.

x = 1,2,3,4
y = 0.002871972681775004, 0.00514787917410944, 0.00863476098280219, 0.012003316194034325
25
rhm2012

Es scheint, als wollten Sie step .

Z.B. 

import matplotlib.pyplot as plt

x = [1,2,3,4] 
y = [0.002871972681775004, 0.00514787917410944, 
     0.00863476098280219, 0.012003316194034325]

plt.step(x, y)
plt.show()

enter image description here

46
Joe Kington

Wenn Sie nicht gleichmäßig verteilte Datenpunkte haben, können Sie das Argument drawstyle für plot verwenden:

x = [1,2.5,3.5,4] 
y = [0.002871972681775004, 0.00514787917410944, 
     0.00863476098280219, 0.012003316194034325]

plt.plot(x, y, drawstyle='steps-pre')

Ebenfalls verfügbar sind steps-mid und steps-post.

12
Will Vousden

Zeichnen Sie einfach zwei Linien, eine bei y = 0 und eine bei y = 1, und trennen Sie bei x, für die Ihre Schrittfunktion bestimmt ist.

z.B. wenn Sie bei x=2.3 von 0 auf 1 wechseln und von x=0 bis x=5 plotten möchten:

import matplotlib.pyplot as plt
#                                 _
# if you want the vertical line _|
plt.plot([0,2.3,2.3,5],[0,0,1,1])
#
# OR:
#                                       _
# if you don't want the vertical line _
#plt.plot([0,2.3],[0,0],[2.3,5],[1,1])

# now change the y axis so we can actually see the line
plt.ylim(-0.1,1.1)

plt.show()
1

Ich denke, Sie wollen die Bar-Methode von pylab.bar(x,y,width=1) oder gleich pyplot. Wenn nicht, überprüfen Sie die gallery für die vielen Plotstile, die Sie ausführen können. Zu jedem Bild gehört ein Beispielcode, der Ihnen zeigt, wie Sie ihn mit matplotlib erstellen können.

1
Yann

Für den Fall, dass jemand nur einige Daten schrittweise angeben möchte, anstatt sie tatsächlich zu zeichnen:

def get_x_y_steps(x, y, where="post"):
    if where == "post":
        x_step = [x[0]] + [_x for tup in Zip(x, x)[1:] for _x in tup]
        y_step = [_y for tup in Zip(y, y)[:-1] for _y in tup] + [y[-1]]
    Elif where == "pre":
        x_step = [_x for tup in Zip(x, x)[:-1] for _x in tup] + [x[-1]]
        y_step = [y[0]] + [_y for tup in Zip(y, y)[1:] for _y in tup]
    return x_step, y_step
0
Ulf Aslak