2010-01-12 3 views
153

У меня есть график графика рассеяния с кучей случайных координат x, y. В настоящее время ось Y начинается с нуля и достигает максимального значения. Я хотел бы, по оси Y, чтобы начать со значения максимальной и идти до 0.Обратный Y-оси в PyPlot

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) 

ответ

332

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

plt.gca().invert_xaxis() 

и/или

plt.gca().invert_yaxis() 
+4

Я думаю, что это настоящий правильный ответ. – heltonbiker

+0

Это определенно есть. –

+13

Имейте в виду, что вы должны установить пределы оси * перед тем, как вы инвертируете ось, иначе она снова будет инвертировать ее. – TheBigH

9

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

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

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

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

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

+0

Жаль, что я мог бы отметить, что вы оба правы. Спасибо, DisplacedAussie! – DarkAnt

26

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

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

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

+2

Это кажется лучшим ответом на меня. :) – DisplacedAussie

+4

'plt.ylim (plt.ylim() [:: - 1])' работал для меня. –

9

Если вы в IPython в режиме pylab, затем

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

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

3

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

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

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

1

В качестве альтернативы , вы можете использовать функцию matplotlib.pyplot.axis(), которая позволяет перевернув любой из участка оси

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

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

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

В самом деле, вы можете инвертировать как ось:

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

с использованием 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