Inverser l'axe Y dans PyPlot


266

J'ai un graphique en nuage de points avec un tas de coordonnées aléatoires x, y. Actuellement, l'axe Y commence à 0 et monte à la valeur maximale. J'aimerais que l'axe Y commence à la valeur maximale et monte à 0.

points = [(10,5), (5,11), (24,13), (7,8)]    
x_arr = []
y_arr = []
for x,y in points:
    x_arr.append(x)
    y_arr.append(y)
plt.scatter(x_arr,y_arr)

Réponses:


557

Il existe une nouvelle API qui rend cela encore plus simple.

plt.gca().invert_xaxis()

et / ou

plt.gca().invert_yaxis()

49
N'oubliez pas que vous devez définir les limites de l'axe avant d'inverser l'axe, sinon il le réinvertira.
TheBigH

55

La réponse de DisplacedAussie est correcte, mais généralement une méthode plus courte consiste simplement à inverser le seul axe en question:

plt.scatter(x_arr, y_arr)
ax = plt.gca()
ax.set_ylim(ax.get_ylim()[::-1])

où la gca()fonction renvoie l'instance Axes actuelle et [::-1]inverse la liste.


3
Cela me semble être une meilleure réponse. :)
DisplacedAussie

18

Utilisez matplotlib.pyplot.axis ()

axis([xmin, xmax, ymin, ymax])

Vous pouvez donc ajouter quelque chose comme ceci à la fin:

plt.axis([min(x_arr), max(x_arr), max(y_arr), 0])

Bien que vous souhaitiez peut-être un rembourrage à chaque extrémité afin que les points extrêmes ne se trouvent pas sur la bordure.


Cela a un avantage sur les deux premières réponses, car cela corrige l'orientation, pas de la retourner à chaque fois (ce qui est un problème si vous devez l'appeler en boucle).
Bas Swinckels

16

Si vous êtes en pylabmode ipython , alors

plt.gca().invert_yaxis()
show()

l' show()est tenu de le faire mettre à jour le chiffre actuel.


9

Vous pouvez également utiliser la fonction exposée par l'objet axes du nuage de points

scatter = plt.scatter(x, y)
ax = scatter.axes
ax.invert_xaxis()
ax.invert_yaxis()

8

Une autre méthode similaire à celles décrites ci-dessus consiste à utiliser plt.ylimpar exemple:

plt.ylim(max(y_array), min(y_array))

Cette méthode fonctionne pour moi lorsque j'essaie de composer plusieurs ensembles de données sur Y1 et / ou Y2


3

utiliser ylim () peut être la meilleure approche pour votre objectif:

xValues = list(range(10))
quads = [x** 2 for x in xValues]
plt.ylim(max(quads), 0)
plt.plot(xValues, quads)

résultera:entrez la description de l'image ici


2

Vous pouvez également utiliser la fonction matplotlib.pyplot.axis () , qui vous permet d'inverser l'un des axes du tracé

ax = matplotlib.pyplot.axis()
matplotlib.pyplot.axis((ax[0],ax[1],ax[3],ax[2]))

Ou si vous préférez inverser uniquement l'axe X, alors

matplotlib.pyplot.axis((ax[1],ax[0],ax[2],ax[3]))

En effet, vous pouvez inverser les deux axes:

matplotlib.pyplot.axis((ax[1],ax[0],ax[3],ax[2]))

0

Si vous utilisez matplotlib, vous pouvez essayer: matplotlib.pyplot.xlim(l, r) matplotlib.pyplot.ylim(b, t)

Ces deux lignes fixent respectivement les limites des axes x et y. Pour l'axe des x, le premier argument l définit la valeur la plus à gauche et le deuxième argument r la valeur la plus à droite. Pour l'axe des y, le premier argument b définit la valeur la plus basse et le deuxième argument t définit la valeur la plus élevée.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.