Подтвердить что ты не робот

Предотвратить научную нотацию в matplotlib.pyplot

Я пытаюсь подавить научную нотацию в pyplot в течение нескольких часов. После нескольких попыток решения, я хотел бы помочь.

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()

plot

Спасибо заранее.

4b9b3361

Ответ 1

В вашем случае вы действительно хотите отключить смещение. Использование научной нотации - это отдельный параметр, показывающий вещи в терминах значения смещения.

Однако ax.ticklabel_format(useOffset=False) должен был работать (хотя вы указали его как одну из вещей, которые этого не сделали).

Например:

fig, ax = plt.subplots()
ax.plot(range(2003,2012,1),range(200300,201200,100))
ax.ticklabel_format(useOffset=False)
plt.show()

enter image description here

Если вы хотите отключить как смещение, так и научную нотацию, используйте 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 будет использовать научную нотацию (в качестве множителя - знак "Нет плюс" ).

enter image description here

Мы можем отключить один отдельно. Наиболее удобным способом является метод ax.ticklabel_format (или plt.ticklabel_format).

Например, если мы вызываем:

ax.ticklabel_format(style='plain')

Мы отключим научную нотацию по оси y:

enter image description here

И если мы назовем

ax.ticklabel_format(useOffset=False)

Мы отключим смещение по оси x, но оставьте научную нотацию оси y нетронутой:

enter image description here

Наконец, мы можем отключить оба:

ax.ticklabel_format(useOffset=False, style='plain')

enter image description here