Обратная ось Y в PyPlot - PullRequest
       52

Обратная ось Y в PyPlot

214 голосов
/ 12 января 2010

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

Ответы [ 8 ]

453 голосов
/ 26 ноября 2011

Существует новый API, который делает это еще проще.

plt.gca().invert_xaxis()

и / или

plt.gca().invert_yaxis()
42 голосов
/ 13 января 2010

DisplacedAussie ответ правильный, но обычно более короткий метод - просто повернуть одну ось в вопросе:

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

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

15 голосов
/ 12 января 2010

Использование matplotlib.pyplot.axis ()

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

Чтобы вы могли добавить что-то вроде этого в конце:

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

Хотя вам может потребоваться заполнение на каждом конце, чтобы крайние точки не находились на границе.

14 голосов
/ 11 октября 2012

Если вы в ipython в режиме pylab, то

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

show() требуется, чтобы обновить текущее значение.

7 голосов
/ 27 мая 2015

Другой метод, аналогичный описанному выше, заключается в использовании plt.ylim, например:

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

Этот метод работает для меня, когда я пытаюсь составить несколько наборов данных для Y1 и / или Y2

3 голосов
/ 24 марта 2017

использование ylim () может быть лучшим подходом для вашей цели:

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

приведет к: enter image description here

2 голосов
/ 10 сентября 2015

Также вы можете использовать функцию 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 голосов
/ 03 июля 2019

Вы также можете использовать функцию, отображаемую объектом осей на диаграмме рассеяния

scatter = plt.scatter(x, y)
ax = scatter.axes
ax.invert_xaxis()
ax.invert_yaxis()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...