Альтернативный способ сделать это, вместо явного определения позиций тиков, - это использовать LogLocator
из модуля matplotlib.ticker
и вручную увеличить количествотики (по умолчанию он будет пытаться установить симпатичное количество тиков; т.е. чтобы он не выглядел слишком тесным).
В этом примере я установил число тиков в 13 на Axes
справа (с использованием numticks=13
), и вы можете видеть, что это увеличивает количество тиков, поэтому один на каждую целую степень равен 10.
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()
РЕДАКТИРОВАТЬ:
Чтобы добавить второстепенные тики с помощью этого метода, мы можем использовать другой LogLocator
, и на этот раз установить опцию subs
, чтобы сказать, где мы хотим, чтобы незначительные тики в каждом десятилетии,Здесь я не установил второстепенных тиков на каждый 0.1, потому что это было бы слишком тесно, так что просто сделайте для подмножества.Обратите внимание, что если вы устанавливаете второстепенные тики, как это, вам также необходимо отключить метки тиков для второстепенных тиков, используя NullFormatter
.
ax2.yaxis.set_major_locator(ticker.LogLocator(numticks=13))
ax2.yaxis.set_minor_locator(ticker.LogLocator(subs=(0.2,0.4,0.6,0.8),numticks=13))
ax2.yaxis.set_minor_formatter(ticker.NullFormatter())