Matplotlib坐标系原点移到左上角

26

如何将matplotlib图形的原点翻转到左上角,而不是默认的左下角?我正在使用matplotlib.pylab.plot生成图形(如果有其他更灵活的绘图程序,请告诉我)。

我在寻找matlab命令的等效方法:axis ij;

此外,我花了几个小时搜索matplotlib帮助和谷歌,但没有找到答案。一些关于我可以查找答案的信息也会很有帮助。

5个回答

33

最简单的方法是使用:

plt.gca().invert_yaxis()

绘制图像后,Origin 仅适用于 imshow


1
这在使用Cartopy将地图放置在卫星图像上时非常有效。请注意,至少对于我的用例来说,这必须在 imshow() 之后运行。谢谢! - kevinmicke
如果你正在使用subplotssharex/sharey,那么只需调用此函数一次,否则对于偶数列/行,你将再次以未改变的方式结束。 - pas-calc

13

axis ij只是使得y轴向下增加而不是向上增加,是这样吗?如果是的话,那么matplotlib.axes.invert_yaxis()也许就是你所需要的——但我现在无法测试它。

如果这行不通,我在一篇邮件中发现了一个建议。

setp(gca(), 'ylim', reversed(getp(gca(), 'ylim')))

你可能想尝试使用axis ij来实现相似的效果。


我从来没能让invert_yaxis()起作用。如果它能起作用,那就太理想了。根据我所拼凑的信息,setp命令应该可以工作,但是"reversed"返回一个迭代器。虽然我还是相对新手,但我无法让它返回一个序列。所以这可能很容易。 - Nate
"axis ij只是让y轴向下增加而不是向上,对吗?" 这并不总是正确的: "axis ij将坐标系原点放置在左上角。 i轴是垂直的,其值从上到下递增。 j轴是水平的,其值从左到右递增。" (http://www.ece.northwestern.edu/local-apps/matlabhelp/techdoc/ref/axis.html) - bers

10

对于图像或等高线图,可以使用关键字origin = None | 'lower' | 'upper',对于线条图,您可以将ylimits设置为从高到低。

from pylab import *
A = arange(25)/25.
A = A.reshape((5,5))

figure()
imshow(A, interpolation='nearest', origin='lower')

figure()
imshow(A, interpolation='nearest')

d = arange(5)
figure()
plot(d)
ylim(5, 0)

show()

1
直接使用“ylim([y1,y2])”或“axis([x1,x2,y1,y2])”设置轴限制是有效的。虽然它不是完全通用的,但我相信我可以想出一些方法使其通用化。也许可以尝试上面建议的setp命令。感谢您的帮助! - Nate

8
以下是实现此目标的基本方法。
ax=pylab.gca()

ax.set_ylim(ax.get_ylim()[::-1])

6
这是一个HTML标签。
plt.ylim(max(plt.ylim()), min(plt.ylim()))

具有优势

plt.gca().invert_yaxis()

如果您处于交互模式,并且重复绘制相同的图(可能是使用更新的数据并在绘图后设置断点),则y轴不会每次都反转。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接