web-dev-qa-db-fra.com

Inverser l’axe Y dans PyPlot

J'ai un graphe de dispersion avec un tas de coordonnées x, y aléatoires. Actuellement, l'axe des ordonnées commence à 0 et va jusqu'à la valeur maximale. Je voudrais que l'axe des 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)
220
DarkAnt

Une nouvelle API rend cela encore plus simple.

plt.gca().invert_xaxis()

et/ou

plt.gca().invert_yaxis()
467
Demitri

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

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

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

42
Tim Whitcomb

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 remplissage à chaque extrémité afin que les points extrêmes ne restent pas à la frontière.

16
DisplacedAussie

Si vous êtes en mode ipython en mode pylab, alors

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

la show() est nécessaire pour lui permettre de mettre à jour le chiffre actuel.

14
charles.fox

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

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

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

7
Mortsde

utiliser ylim () pourrait ê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: enter image description here

3
Farzad Vertigo

Alternativement, vous pouvez utiliser la fonction matplotlib.pyplot.axis () , qui vous permet d'inverser n'importe quel axe 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]))
2
Luis DG

Vous pouvez également utiliser une 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()
1
ShikharDua