web-dev-qa-db-fra.com

Comment tracer une fonction step avec Matplotlib en Python?

Cela devrait être facile mais je viens juste de commencer à jouer avec matplotlib et python. Je peux faire une ligne ou un nuage de points mais je ne suis pas sûr de savoir comment faire une simple étape. Toute aide est très appréciée.

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

Il semble que vous souhaitiez step .

Par exemple. 

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

Si vous avez des points de données non uniformément espacés, vous pouvez utiliser l'argument drawstyle keyword pour plot:

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

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

steps-mid et steps-post sont également disponibles.

12
Will Vousden

Tracez simplement deux lignes, une en y = 0 et une en y = 1, coupant à la variable x votre fonction de pas est pour?

par exemple. si vous voulez passer de 0 à 1 à x=2.3 et tracer de x=0 à x=5:

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
mathematical.coffee

Je pense que vous voulez la méthode de calcul de pylab.bar(x,y,width=1) ou également pyplot. sinon, consultez la gallery pour les nombreux styles de tracé que vous pouvez utiliser. Chaque image est livrée avec un exemple de code vous expliquant comment utiliser matplotlib.

1
Yann

Dans le cas où quelqu'un voudrait simplement améliorer certaines données plutôt que de les représenter:

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