<p>另一种方法不是显式地定义记号位置,而是使用<a href="https://matplotlib.org/api/ticker_api.html" rel="nofollow noreferrer">^{<cd2>}</a>模块中的<a href="https://matplotlib.org/api/ticker_api.html#matplotlib.ticker.LogLocator" rel="nofollow noreferrer">^{<cd1>}</a>,并手动增加刻度数(默认情况下,它将尝试设置一个漂亮的刻度数;也就是说,这样看起来不会太狭窄)。在</p>
<p>在这个例子中,我将右边的<code>Axes</code>上的节拍数设置为13(使用<code>numticks=13</code>),您可以看到这增加了节拍数,因此每个10的整数次幂都有一个。在</p>
<pre><code>import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
# Create figure and axes
fig, (ax1, ax2) = plt.subplots(ncols=2)
# Make yscale logarithmic
ax1.set_yscale('log')
ax2.set_yscale('log')
# Set y limits
ax1.set_ylim(1e3, 1e15)
ax2.set_ylim(1e3, 1e15)
# On ax2, lets tell the locator how many ticks we want
ax2.yaxis.set_major_locator(ticker.LogLocator(numticks=13))
ax1.set_title('default ticks')
ax2.set_title('LogLocator with numticks=13')
plt.show()
</code></pre>
<p><a href="https://i.stack.imgur.com/9RtVJ.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/9RtVJ.png" alt="enter image description here"/></a></p>
<p>编辑:</p>
<p>要用这个方法添加次要刻度,我们可以使用另一个<code>LogLocator</code>,这次设置<code>subs</code>选项来说明我们希望在每个十年中的哪个位置使用小记号。这里我没有在每0.1设置一个小刻度,因为它太窄了,所以只对一个子集进行设置。注意,如果像这样设置小刻度,还需要使用<code>NullFormatter</code>关闭次要刻度的刻度标签。在</p>
^{pr2}$
<p><a href="https://i.stack.imgur.com/XIxZI.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/XIxZI.png" alt="enter image description here"/></a></p>