仅将轴限制在 X 或 Y 轴上。

29

我有一个类似这样的图:

enter image description here

显然,左右两侧是浪费空间,因此我进行了设置。

plt.axis('tight')

但是这会给我生成这样的图:

enter image description here

xlim 现在看起来不错,但是 ylim 对于图形来说太紧了。

我在想,如果我只能在我的情况下将 axis(tight) 设置为 x 轴吗?

这样,图形可能会看起来像这样:

enter image description here

我完全可以手动完成这个操作。

plt.gca().set_xlim(left=-10, right=360)

但我担心这不是一种非常优雅的解决方案。


仍在努力弄清楚为什么这里的默认行为如此奇怪。 - eric
更一般地说,您可能还想显示绘制x范围的子集,并使y范围在狭窄(在x上)的视图中紧密。反之亦然。 接受的答案也可以用于此,即通常独立设置ytight或xtight(使用Matlab术语)... - CPBL
2个回答

59
你想从 matplotlib.axes.Axes 中使用 autoscale 方法的 matplotlib 相关内容。

enter image description here

使用功能API,您可以应用紧密的x轴。
plt.autoscale(enable=True, axis='x', tight=True)

如果您正在使用面向对象的API,则需要使用以下代码。
ax = plt.gca()  # only to illustrate what `ax` is
ax.autoscale(enable=True, axis='x', tight=True)

enter image description here

为了完整性,axis参数可以取 'x''y''both',其中默认值为 'both'


1
一个小补充:我主要使用面向对象的API,autoscale实际上是Axes类的一个方法。 - Wisperwind
这似乎不适用于y轴。我尝试使用axis = 'y',但没有任何变化。 - Steven C. Howell
@StevenC.Howell 对于 matplotlib 版本 2.2.2 及以下的 y 轴,在 Linux(Python 2)和 Windows(Python 3,32-/64-bit 版本)上都可以正常工作。 - Vadim Shkaberda

3

我只需在那些我知道会想让我的xlims贴着数据的脚本开头放入以下内容:

import matplotlib.pyplot as plt
plt.rcParams['axes.xmargin'] = 0

如果我决定在同一脚本中为单个图形添加一些空白缓冲区,我需要手动执行以下操作:
plt.xlim(lower_limit, upper_limit)

虽然接受的答案是有效的,而且我曾经使用过一段时间,但我转而采用这种策略,因为我每个脚本只需要记住一次。


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