Зворотна Y-вісь у PyPlot


265

У мене є графік розкидання графіку з купою випадкових координат x, y. В даний час Y-Axis починається з 0 і піднімається до максимального значення. Я хотів би, щоб Y-Axis починався з максимального значення і піднімався до 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)

Відповіді:


557

Існує новий API, який робить це ще простіше.

plt.gca().invert_xaxis()

та / або

plt.gca().invert_yaxis()

49
Майте на увазі, що вам потрібно встановити межі осі перед тим, як перевернути вісь, інакше вона знову відверне її.
TheBigH

55

Відповідь DisplacedAussie правильна, але, як правило, коротший метод полягає лише в тому, щоб повернути одну осі, про яку йде мова:

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

де gca()функція повертає поточний екземпляр Axes і [::-1]повертає список.


3
Це здається мені кращою відповіддю. :)
Переміщено Австрія

18

Використовуйте matplotlib.pyplot.axis ()

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

Отже, ви можете додати щось подібне наприкінці:

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

Хоча ви можете захотіти набивання на кожному кінці, щоб крайні точки не сиділи на кордоні.


Це має перевагу перед першими двома відповідями в тому, що він фіксує орієнтацію, а не перевертати її кожен раз (що є проблемою, якщо вам потрібно викликати її в циклі).
Bas Swinckels

16

Якщо ви в pylabрежимі ipython , значить

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

show()потрібно , щоб зробити його оновити поточну фігуру.


9

Ви також можете використовувати функцію, оголену об'єктом осей ділянки розсіювання

scatter = plt.scatter(x, y)
ax = scatter.axes
ax.invert_xaxis()
ax.invert_yaxis()

8

Інший метод, подібний до описаного вище, полягає у використанні, plt.ylimнаприклад:

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

Цей метод працює для мене, коли я намагаюся скласти кілька наборів даних на Y1 та / або Y2


3

використання ylim () може бути найкращим підходом для ваших цілей:

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

результат:введіть тут опис зображення


2

Крім того, ви можете використовувати функцію matplotlib.pyplot.axis () , яка дозволяє інвертувати будь-яку вісь ділянки

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

Або якщо ви віддаєте перевагу лише повернути вісь X, тоді

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

Дійсно, ви можете перевернути обидві осі:

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

0

Якщо ви використовуєте matplotlib, ви можете спробувати: matplotlib.pyplot.xlim(l, r) matplotlib.pyplot.ylim(b, t)

Ці два рядки встановлюють межі осей x і y відповідно. Для осі x перший аргумент l встановлює найбільше ліве значення, а другий аргумент r встановлює найбільше праве значення. Для осі y перший аргумент b встановлює найбільше нижнє значення, а другий аргумент t встановлює найбільше значення верхнього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.