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

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

Ответ 1

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

plt.gca().invert_xaxis()

и/или

plt.gca().invert_yaxis()

Ответ 2

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

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

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

Ответ 3

Используйте matplotlib.pyplot.axis()

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

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

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

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

Ответ 4

Если вы находитесь в режиме ipython в pylab, тогда

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

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

Ответ 5

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

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

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

Ответ 6

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

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

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

Ответ 7

В качестве альтернативы вы можете использовать функцию 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]))

Ответ 8

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

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

Ответ 9

Если вы используете matplotlib, вы можете попробовать: matplotlib.pyplot.xlim(l, r) matplotlib.pyplot.ylim(b, t)

Эти две линии устанавливают пределы осей x и y соответственно. Для оси x первый аргумент l устанавливает самое левое значение, а второй аргумент r устанавливает самое правое значение. Для оси y первый аргумент b устанавливает самое нижнее значение, а второй аргумент t устанавливает самое верхнее значение.