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


266

У меня есть график рассеяния с набором случайных координат 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)

Ответы:


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

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


Это имеет преимущество перед первыми двумя ответами, заключающееся в том, что он фиксирует ориентацию, а не переворачивает ее каждый раз (что является проблемой, если вам нужно вызывать ее в цикле).
Бас Суинкельс

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

Или, если вы предпочитаете повернуть только ось Х, то

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.