2010-01-12 379 views
153

我有一堆隨機x,y座標的散點圖。目前,Y軸從0開始並達到最大值。我想Y軸開始在最大值,並上升到0。PyPlot中的反向Y軸

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 2012-05-04 18:53:23

+0

它絕對是。 – 2013-02-12 15:59:47

+13

請注意,您必須在*軸反轉之前設置軸限制*,否則它將再次反轉。 – TheBigH 2016-01-22 15:56:58

9

使用matplotlib.pyplot.axis()

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

所以,你可以在最後這樣添加的東西:

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

雖然你可能想在每一端填充,以便極端點不坐在邊界上。

+0

希望我可以標記你們兩個正確。感謝DisplacedAussie! – DarkAnt 2010-01-14 17:48:47

26

DisplacedAussie的回答是正確的,但通常更短的方法只是扭轉問題單軸:

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

其中gca()函數返回當前軸實例和[::-1]反轉的列表中。

+2

這似乎是對我更好的答案。 :) – DisplacedAussie 2010-01-12 23:07:25

+4

'plt.ylim(plt.ylim()[:: - 1])'爲我工作。 – 2013-10-30 08:40:31

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 Ÿ反向X軸,然後

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

事實上,你可以反轉兩個軸:使用ylim()可能是你的目的,最好的辦法

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

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

將導致:enter image description here