Как предотвратить преобразование чисел в экспоненциальную форму на рисунке Python matplotlib

Я использую Matplotlib в Python для построения простых наборов данных x-y. В результате получаются красивые графики, хотя, когда я слишком сильно увеличиваю масштаб различных участков построенного графика, используя вид рисунка (который появляется при выполнении plt.show()), значения оси x меняются от стандартной числовой формы (1050, 1060 , 1070 и т. Д.) В научную форму с экспоненциальной записью (например, 1, 1.5, 2.0 с меткой оси x, заданной как +1.057e3).

Я бы предпочел, чтобы мои фигуры сохранили простую нумерацию оси, а не использовали экспоненциальную форму. Есть ли способ заставить Matplotlib сделать это?


person IanRoberts    schedule 05.02.2013    source источник
comment
дубликат stackoverflow.com/questions/11855363/   -  person tacaswell    schedule 05.02.2013


Ответы (6)


Форматирование меток галочки контролируется объектом Formatter, который при условии, что вы не сделали ничего особенного, будет ScalerFormatter по умолчанию. Этот форматер будет использовать постоянный сдвиг, если частичное изменение видимых значений очень мало. Чтобы этого не произошло, просто выключите его:

plt.plot(arange(0,100,10) + 1000, arange(0,100,10))
ax = plt.gca()
ax.get_xaxis().get_major_formatter().set_useOffset(False)
plt.draw()

Если вы хотите вообще избежать научных обозначений,

ax.get_xaxis().get_major_formatter().set_scientific(False)

Можно управлять этим глобально с помощью axes.formatter.useoffset rcparam.

person tacaswell    schedule 05.02.2013
comment
Спасибо, работает. Приносим извинения за повторяющийся вопрос - я провел поиск перед его публикацией, но мои поиски включали такие термины, как научная нотация и экспоненциальная форма, а не относительные сдвиги осей, которые использовал предыдущий пользователь. - person IanRoberts; 05.02.2013
comment
Есть ли способ принудительно принудительно изменить это изменение? Я никогда не находил оси научных обозначений и всегда выключаю их. Однако я не мог найти для этого rcParam. - person IanRoberts; 30.07.2014
comment
@IanRoberts Смотрите обновление, это axes.formatter.useoffset rcparam - person tacaswell; 15.01.2015
comment
Большое спасибо! Я лично предпочел бы, чтобы по умолчанию для этого параметра было установлено значение False, поскольку это, кажется, сбивает с толку многих и приносит пользу немногим. - person IanRoberts; 19.01.2015
comment
Верно, хорошее замечание. Это было довольно необоснованное утверждение, хотя я видел немало людей, которые спрашивали, как это отключить. В любом случае, это исправление прекрасно решает эту проблему, так что я могу пока забыть об этом ... Ура - person IanRoberts; 20.01.2015
comment
Я не могу заставить это работать; см. мой вопрос здесь: stackoverflow.com/questions/40336020/ - person Gabriel Staples; 31.10.2016

Вы можете использовать более простую команду, чтобы выключить его:

plt.ticklabel_format(useOffset=False)
person Eki    schedule 05.05.2017

Вы можете использовать что-то вроде:

from matplotlib.ticker import ScalarFormatter, FormatStrFormatter

ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))
person Animesh Saxena    schedule 04.03.2015
comment
Это единственное решение, которое сработало для меня при использовании оси журнала. Другие варианты. Я пробовал все возникшие ошибки атрибутов, например. AttributeError: 'LogFormatterSciNotation' object has no attribute 'set_scientific' - person tsherwen; 24.08.2020

Используйте следующую команду: ax.ticklabel_format(useOffset=False, style='plain')

Если вы используете подзаговор, вы можете столкнуться с AttributeError: This method only works with the ScalarFormatter, и в этом случае вы должны добавить axis='y', как показано ниже. Вы можете изменить «y» на ось с проблемами.

ax1.ticklabel_format(useOffset=False, style='plain', axis='y')

Исходный вопрос и ответ здесь. Обратите внимание, что использование команды axis 'y' скрыто в комментариях к ответу.

person Mauro    schedule 11.09.2020

Я использовал приведенный ниже код перед графиками, и он работал у меня без проблем.

plt.ticklabel_format(style='plain')
person Satish Kumar P    schedule 06.05.2021

Точно я не хотел, чтобы научные числа отображались при увеличении масштаба, и в моем случае сработало и следующее. Я использую широту и долготу для обозначения, когда научная форма не имеет смысла.

plt.ticklabel_format(useOffset=False)
person Reza Amouzgar    schedule 11.06.2021