plt.plot(range(2003,2012,1),range(200300,201200,100)) # several solutions from other questions have not worked, including # plt.ticklabel_format(style='sci', axis='x', scilimits=(-1000000,1000000)) # ax.get_xaxis().get_major_formatter().set_useOffset(False) plt.show()
который выдает следующий график:
Как мне предотвратить научную нотацию здесь? Нарушен ли ticklabel_format? не решает проблему фактического удаления смещения.
В вашем случае вы на самом деле хотите отключить смещение. Использование научной нотации - это отдельная настройка от отображения вещей в терминах значения смещения.
Однако, ax.ticklabel_format(useOffset=False) должно было сработать (хотя вы указали это как одну из вещей, которая не сработала).
Если вы хотите отключить как смещение, так и научную нотацию, вам следует использовать ax.ticklabel_format(useOffset=False, style='plain').
Разница между "смещением" и "научной нотацией"
В форматировании оси matplotlib "научная нотация" относится к множителю для отображения чисел, в то время как "смещение" - это отдельный термин, который добавлен.
Рассмотрим этот пример:
import numpy as np import matplotlib.pyplot as plt
x = np.linspace(1000, 1001, 100) y = np.linspace(1e-9, 1e9, 100)
fig, ax = plt.subplots() ax.plot(x, y) plt.show()
Ось x будет иметь смещение (обратите внимание на знак +), а ось y будет использовать научную нотацию (в качестве множителя - без знака плюс).
Мы можем отключить любой из них по отдельности. Наиболее удобным способом является ax.ticklabel_format метод (или plt.ticklabel_format).
Например, если мы вызовем:
ax.ticklabel_format(style='plain')
Мы отключим научную нотацию по оси y:
И если мы вызовем
ax.ticklabel_format(useOffset=False)
Мы отключим смещение по оси x, но оставим научную нотацию по оси y нетронутой:
Наконец, мы можем отключить и то, и другое с помощью:
Здесь научная нотация используется для оси, если ограничение оси меньше 10 ^ -5 или больше 10 ^ 8.
По умолчанию научная нотация используется для чисел, меньших 10^-5 или больших 10 ^ 6, поэтому, если наибольшее значение тиков приходится на этот интервал, научная нотация не используется.
этого не происходит, потому что y-limit (999999) меньше, чем 10 ^ 6, ограничение по умолчанию.
Это ограничение по умолчанию может быть изменено с помощью scilimits= параметра ticklabel_format(); просто передайте кортеж формата: (low, high) где верхний предел тиков должен быть в интервале (10^low, 10^high). Например, в следующем коде (немного экстремальный пример) галочки показаны как полные числа, потому что np.logspace(0,100)[-1] < 10**101 это True.