373 votes

Inverser l'axe Y dans PyPlot

J'ai un graphique en nuage de points avec un tas de coordonnées x, y aléatoires. Actuellement, l'axe des Y commence à 0 et va jusqu'à la valeur maximale. Je voudrais que l'axe des Y commence à la valeur maximale et aille jusqu'à 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)

1 votes

Le nombre de réponses correctes à cette question montre à quel point l'utilisation de cette bibliothèque est confuse.

0 votes

@g_uint Depuis au moins 10 ans, il y a un La façon la plus évidente est d'appeler le invert_yaxis() méthode.

0 votes

@BlackJack ce qui est évident pour vous peut ne pas l'être pour un autre :)

732voto

Demitri Points 1315

Il existe une nouvelle API qui rend les choses encore plus simples.

plt.gca().invert_xaxis()

et/ou

plt.gca().invert_yaxis()

71 votes

Sachez que vous devez définir les limites de l'axe avant vous inversez l'axe, sinon il l'inversera à nouveau.

0 votes

Ce serait bien s'il prenait un argument booléen. Lorsqu'elle est appelée à plusieurs reprises, vous ne faites que l'inverser.

83voto

Tim Whitcomb Points 5267

DéplacésAussie La réponse de l'auteur est correcte, mais une méthode plus courte consiste généralement à inverser l'axe unique en question :

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

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

4 votes

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

42voto

ShikharDua Points 356

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()

0 votes

Je me demandais pourquoi mon fil de fer 3D ne me donnait pas la même date que la carte. Inversez l'axe des x.

23voto

DisplacedAussie Points 2872

Utilice matplotlib.pyplot.axis()

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

Vous pourriez donc ajouter quelque chose comme ça à la fin :

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

Vous pouvez cependant prévoir un rembourrage à chaque extrémité afin que les points extrêmes ne se situent pas sur la frontière.

0 votes

Cette réponse présente l'avantage, par rapport aux deux premières, de fixer l'orientation, et non de la retourner à chaque fois (ce qui est un problème si vous devez l'appeler dans une boucle).

23voto

godelbach Points 53

Si vous êtes dans ipython dans pylab puis

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

le site show() est nécessaire pour qu'il mette à jour le chiffre actuel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X