在对数刻度pyplot中同时使用ylim
和yticks
时遇到了一些麻烦。请参见以下代码的输出:
将numpy导入为np 从matplotlib导入pyplot作为plt
plt.figure(figsize=(5, 3))
x = np.linspace(0, 1, 101)
y = np.exp(-5*x)
plt.plot(x, y, 'o', c=blue, markersize=4)
plt.yscale('log')
plt.yticks([10**-1, 1/np.e, 10**0], [r'$10^{-1}$', r'$1/e$', r'$10^0$'])
plt.ylim(10**-1,10**0)
这给出了
显然,滴答声比我指定的要多。但是,如果我不使用ylim
或yscale
,则会显示正确的3个刻度。使用semilogy
会导致相同的问题。之前有人遇到过这种情况吗,有人知道解决方法吗?这适用于matplotlib 3.1,但它也发生在3.0(我刚刚从中升级了)。
答案 0 :(得分:1)
您看到的基本上是次要的刻度标签。我认为它们在设置限制后出现的原因是,您有点在小范围内放大。一个简单的解决方法是隐藏次要刻度标签。要访问它们,我使用轴对象ax
fig, ax = plt.subplots(figsize=(5, 3)) # <--- Define an axis object
x = np.linspace(0, 1, 101)
y = np.exp(-5*x)
plt.plot(x, y, 'o', c='blue', markersize=4)
plt.yscale('log')
plt.ylim(10**-1,10**0)
plt.setp(ax.get_yminorticklabels(), visible=False) # <--- Hide the minors
plt.yticks([10**-1, 1/np.e, 10**0], [r'$10^{-1}$', r'$1/e$', r'$10^0$']);