Axe des ordonnées inversé à PyPlot

j'ai un nuage de points avec un tas de coordonnées x, y aléatoires. Actuellement, L'axe des Y commence à 0 et monte à la valeur max. Je voudrais que L'axe des Y commence à la valeur max 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)
179
demandé sur Mateusz Piotrowski 2010-01-12 22:31:47

7 réponses

il y a une nouvelle API qui rend cela encore plus simple.

plt.gca().invert_xaxis()

et / ou

plt.gca().invert_yaxis()
381
répondu Demitri 2011-11-26 18:12:42

DisplacedAussie 's réponse est correcte, mais en général, une plus courte méthode consiste simplement à inverser l'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 des Axes courants et le [::-1] inverse la liste.

34
répondu Tim Whitcomb 2017-05-23 11:47:25

Utiliser matplotlib.pyplot.de l'axe()

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

donc vous pouvez ajouter quelque chose comme ça à la fin:

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

bien que vous pourriez vouloir capitonner à chaque extrémité afin que les points extrêmes ne s'asseyent pas sur la frontière.

13
répondu DisplacedAussie 2010-01-12 20:42:39

si vous êtes en ipython en mode pylab , puis

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

le show() est nécessaire pour mettre à jour le chiffre actuel.

10
répondu charles.fox 2013-10-25 07:55:10

une autre méthode semblable à 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 quand je tente de composer plusieurs ensembles de données sur Y1 et / ou Y2

4
répondu Mortsde 2015-05-27 07:26:31

alternativement, vous pouvez utiliser le matplotlib.pyplot.axis () fonction, qui vous permet d'Inverser n'importe quel de l'axe de la parcelle

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

ou si vous préférez Inverser l'axe des 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
répondu Luis DG 2015-09-10 12:53:13

utiliser ylim () pourrait être la meilleure approche pour votre but:

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

1
répondu Farzad Vertigo 2017-03-24 12:30:59