matplotlib.pyplot - 仅修复一个轴限制,将另一个设置为auto

Gab*_*iel 11 python numpy matplotlib

以下MWE产生一个简单的散点图:

import numpy as np
import matplotlib.pyplot as plt

# Generate some random two-dimensional data:
m1 = np.random.normal(size=100)
m2 = np.random.normal(scale=0.5, size=100)

# Plot data with 1.0 max limit in y.
plt.figure()
# Set x axis limit.
plt.xlim(0., 1.0)
# Plot points.
plt.scatter(m1, m2)
# Show.
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此图中,x轴限制设置为[0., 1.].我需要设定 y轴的极限为1离开下限到任何min值在m2是(即:让python决定的下限值).

在这种特殊情况下,我可以使用plt.ylim(min(m2), 1.0)但是我的实际代码要复杂得多,因为要绘制很多东西,所以这样做并不是一个真正的选择.

我试过设置:

plt.ylim(top=1.)
Run Code Online (Sandbox Code Playgroud)

并且:

plt.gca().set_ylim(top=1.)
Run Code Online (Sandbox Code Playgroud)

在这里建议如何设置'auto'作为上限,但使用matplotlib.pyplot保持固定的下限,但两个命令似乎都不起作用.它们都正确地将y轴的上限设置为1.但它们也强制下限为0.这是我不想要的.

我正在使用Python 2.7.3Matplotlib 1.2.1.

Saj*_*ngh 22

如果关注的只是绘制了大量数据,为什么不检索图的较低y限制并在设置限制时使用它?

plt.ylim(plt.ylim()[0], 1.0)
Run Code Online (Sandbox Code Playgroud)

或类似地针对特定轴.有点难看,但我认为没有理由不应该工作.


问题实际上在于,在绘图之前设置限制会禁用自动缩放.默认情况下,x轴和y轴的限制都是(0.0, 1.0),这就是y下限保持为0的原因.

解决方案是在调用所有绘图命令后设置绘图限制.或者,如果需要,您可以重新启用自动缩放

  • 我建议使用OO接口:`ax = plt.gca(); cur_ylim = ax.get_ylim(); ax.set_ylim([cur_ylim [0],1])` (3认同)
  • 在**绘制数据后尝试设置限制** - 所以在调用`plt.scatter`之后. (2认同)
  • @Gabriel 是的,我也应该早点意识到这一点。但这对我们所有人来说都是一次学习练习。我更新了我的答案。 (2认同)