Ответ 1
Существует новый API, который делает это еще проще.
plt.gca().invert_xaxis()
и/или
plt.gca().invert_yaxis()
У меня есть график графика рассеяния с кучей случайных координатах 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)
Существует новый API, который делает это еще проще.
plt.gca().invert_xaxis()
и/или
plt.gca().invert_yaxis()
DisplacedAussie ответ правильный, но обычно более короткий метод заключается в том, чтобы просто обратить внимание на одну ось:
plt.scatter(x_arr, y_arr)
ax = plt.gca()
ax.set_ylim(ax.get_ylim()[::-1])
где функция gca()
возвращает текущий экземпляр Axes, а [::-1]
меняет список.
Используйте matplotlib.pyplot.axis()
axis([xmin, xmax, ymin, ymax])
Итак, вы можете добавить что-то вроде этого в конце:
plt.axis([min(x_arr), max(x_arr), max(y_arr), 0])
Хотя вам может понадобиться отступы на каждом конце, чтобы крайние точки не сидели на границе.
Если вы находитесь в режиме ipython в pylab
, тогда
plt.gca().invert_yaxis()
show()
требуется show()
, чтобы обновить текущую цифру.
Другим аналогичным способом, описанным выше, является использование plt.ylim
, например:
plt.ylim(max(y_array), min(y_array))
Этот метод работает для меня, когда я пытаюсь собрать несколько наборов данных на Y1 и/или Y2
Использование ylim() может быть лучшим подходом для вашей цели:
xValues = list(range(10))
quads = [x** 2 for x in xValues]
plt.ylim(max(quads), 0)
plt.plot(xValues, quads)
В качестве альтернативы вы можете использовать функцию 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]))
Вы также можете использовать функцию, отображаемую объектом осей на диаграмме рассеяния.
scatter = plt.scatter(x, y)
ax = scatter.axes
ax.invert_xaxis()
ax.invert_yaxis()
Если вы используете matplotlib, вы можете попробовать:
matplotlib.pyplot.xlim(l, r)
matplotlib.pyplot.ylim(b, t)
Эти две линии устанавливают пределы осей x и y соответственно. Для оси x первый аргумент l устанавливает самое левое значение, а второй аргумент r устанавливает самое правое значение. Для оси y первый аргумент b устанавливает самое нижнее значение, а второй аргумент t устанавливает самое верхнее значение.