2010-01-12 320 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