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