ScalarFormatter показывает метки в формате по умолчанию. Обратите внимание, что в зависимости от конкретной ситуации, matplotlib по-прежнему может использовать научную нотацию c:
Когда числа слишком велики (по умолчанию это около 4 цифр). set_powerlimits((n, m))
может использоваться для изменения пределов.
Если числа очень близки друг к другу, matplotlib описывает диапазон, используя смещение. Это смещение находится в верхней части оси. Это можно подавить с помощью параметра useOffset=None
форматера.
В некоторых случаях с логарифмической шкалой c основных тиков очень мало. Тогда также некоторые (но не все) мелкие галочки получают ярлык. Также для них, форматер может быть изменен. Проблема может заключаться в том, что простой ScalarFormatter
установит слишком много меток. Либо подавьте все эти второстепенные метки, используя NullFormatter
, либо вам понадобится очень специальный форматировщик, который возвращает пустые строки для меток второстепенных тиков, которые необходимо подавить.
Простой пример :
from matplotlib import pyplot as plt
from matplotlib import ticker
import numpy as np
N = 50
Cd_rank = np.linspace(0, 100, N)
Cd_raw = np.random.normal(1, 20, N).cumsum() + 100
plt.plot(Cd_rank, Cd_raw, linewidth=4)
plt.plot([0, 1], [0.3, 0.3], linewidth=4)
plt.plot([0, 1], [5, 5], linewidth=4)
plt.yscale('log')
plt.gca().yaxis.set_major_formatter(ticker.ScalarFormatter())
plt.gca().yaxis.set_minor_formatter(ticker.NullFormatter())
plt.show()
А вот более сложный пример с младшими (зелеными) и крупными (красными) галочками.
from matplotlib import pyplot as plt
from matplotlib import ticker
import numpy as np
N = 50
Cd_rank = np.linspace(0, 100, N)
Cd_raw = np.random.normal(10, 5, N).cumsum() + 80
plt.plot(Cd_rank, Cd_raw, linewidth=4)
plt.yscale('log')
mticker = ticker.ScalarFormatter(useOffset=False)
mticker.set_powerlimits((-6, 6))
ax = plt.gca()
ax.yaxis.set_major_formatter(mticker)
ax.yaxis.set_minor_formatter(mticker)
ax.tick_params(axis='y', which='major', colors='crimson')
ax.tick_params(axis='y', which='minor', colors='seagreen')
plt.show()
PS: Когда в тиках участвуют обе степени: 10 больше 1 и меньше 1 (например, 100, 10, 1, 0.1, 0.01
), ScalarFormatter не отображает числа меньше 1 (отображает 0.1
и 0.01
как 0
). В этом случае вместо него можно использовать StrMethodFormatter
:
plt.gca().yaxis.set_major_formatter(ticker.StrMethodFormatter("{x}"))