Odwróć oś Y w PyPlot

265

Mam wykres punktowy z grupą losowych współrzędnych x, y. Obecnie oś Y zaczyna się od 0 i wzrasta do wartości maksymalnej. Chciałbym, aby oś Y zaczynała się od wartości maksymalnej i osiągała zero.

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)
DarkAnt
źródło

Odpowiedzi:

556

Istnieje nowy interfejs API, który czyni to jeszcze prostszym.

plt.gca().invert_xaxis()

i / lub

plt.gca().invert_yaxis()
Demitri
źródło
49
Pamiętaj, że musisz ustawić granice osi przed odwróceniem osi, w przeciwnym razie cofnie to odwrócenie.
TheBigH
55

Odpowiedź PrzesuniętaAussie jest poprawna, ale zwykle krótszą metodą jest po prostu odwrócenie danej osi:

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

gdzie gca()funkcja zwraca bieżącą instancję Axes i [::-1]odwraca listę.

Tim Whitcomb
źródło
3
To wydaje mi się lepszą odpowiedzią. :)
DisplacedAussie
18

Użyj matplotlib.pyplot.axis ()

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

Na koniec możesz dodać coś takiego:

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

Chociaż możesz chcieć dopełnienia na każdym końcu, aby skrajne punkty nie znajdowały się na granicy.

DisplacedAussie
źródło
Ma to tę przewagę nad pierwszymi dwiema odpowiedziami, że naprawia orientację, a nie odwraca ją za każdym razem (co jest problemem, jeśli trzeba wywoływać ją w pętli).
Bas Swinckels,
16

Jeśli jesteś w pylabtrybie ipython , to

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

show()jest wymagane, aby zaktualizować obecną postać.

charles.fox
źródło
9

Można również użyć funkcji odsłoniętej przez obiekt osi wykresu rozrzutu

scatter = plt.scatter(x, y)
ax = scatter.axes
ax.invert_xaxis()
ax.invert_yaxis()
ShikharDua
źródło
8

Inną podobną metodą do opisanych powyżej jest użycie plt.ylimna przykład:

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

Ta metoda działa dla mnie, gdy próbuję połączyć wiele zestawów danych na Y1 i / lub Y2

Mortsde
źródło
3

użycie ylim () może być najlepszym podejściem do twojego celu:

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

skutkuje:wprowadź opis zdjęcia tutaj

Farzad Vertigo
źródło
2

Alternatywnie możesz użyć funkcji matplotlib.pyplot.axis () , która umożliwia odwrócenie dowolnej osi wydruku

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

Lub jeśli wolisz odwrócić tylko oś X, to

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

Rzeczywiście, możesz odwrócić obie osie:

matplotlib.pyplot.axis((ax[1],ax[0],ax[3],ax[2]))
Luis DG
źródło
0

Jeśli używasz matplotlib, możesz spróbować: matplotlib.pyplot.xlim(l, r) matplotlib.pyplot.ylim(b, t)

Te dwie linie wyznaczają odpowiednio granice osi x i y. Dla osi x pierwszy argument l ustawia najbardziej lewą wartość, a drugi argument r ustawia najbardziej prawą wartość. Dla osi y pierwszy argument b ustawia najniższą wartość, a drugi argument t ustawia najwyższą wartość.

Andy Turner
źródło