Вы можете явно установить основные тики на желаемые позиции. Либо просто ticks=[2**i for i in range(30]
, либо более сложные отметки из примера (они будут близки к равномерному, но не полностью). При желании числа могут отображаться с разделителем тысяч. Незначительные отметки, которые автоматически добавляются шкалой журнала, выглядят очень запутанно и могут быть удалены.
from matplotlib import pyplot as plt
import numpy as np
from matplotlib.ticker import FixedLocator, StrMethodFormatter, NullFormatter, NullLocator
fig, ax = plt.subplots()
ax.plot(np.exp(10+np.random.normal(0.01, 0.6, 1000).cumsum()))
ax.grid(True, which="major", ls="-")
ax.set_yscale('log')
ticks = [j * k for j in (1, 1000, 1000000) for k in [3, 6, 12] + [25*2**i for i in range(7)] ]
ax.yaxis.set_major_locator(FixedLocator(ticks))
ax.yaxis.set_major_formatter(StrMethodFormatter('{x:,.0f}'))
ax.yaxis.set_minor_locator(NullLocator())
#ax.yaxis.set_minor_formatter(NullFormatter())
ax.set_ylim(ymin=2)
plt.tight_layout()
plt.show()
пример сюжета