Matplotlib pyplot axes formatter

У меня есть изображение:

введите описание изображения здесь

Здесь по оси y я хотел бы получить 5x10^-5 4x10^-5 и т. Д. Вместо 0.00005 0.00004 .

Я пробовал до сих пор:

 fig = plt.figure() ax = fig.add_subplot(111) y_formatter = matplotlib.ticker.ScalarFormatter(useOffset=True) ax.yaxis.set_major_formatter(y_formatter) ax.plot(m_plot,densities1,'-ro',label='0.0<z<0.5') ax.plot(m_plot,densities2, '-bo',label='0.5<z<1.0') ax.legend(loc='best',scatterpoints=1) plt.legend() plt.show() 

Кажется, это не работает. На странице документа для тикеров нет прямого ответа.

    Вы можете использовать matplotlib.ticker.FuncFormatter чтобы выбрать формат ваших тиков с функцией, как показано в приведенном ниже примере кода. Фактически вся функция выполняет преобразование ввода (float) в экспоненциальную нотацию, а затем заменяет «e» на «x10 ^», чтобы вы получили желаемый формат.

     import matplotlib.pyplot as plt import matplotlib.ticker as tick import numpy as np x = np.linspace(0, 10, 1000) y = 0.000001*np.sin(10*x) fig = plt.figure() ax = fig.add_subplot(111) ax.plot(x, y) def y_fmt(x, y): return '{:2.2e}'.format(x).replace('e', 'x10^') ax.yaxis.set_major_formatter(tick.FuncFormatter(y_fmt)) plt.show() 

    образ

    Если вы хотите использовать экспоненциальную нотацию (т. Е. 5.0e-6.0), то есть гораздо более аккуратное решение, в котором вы используете matplotlib.ticker.FormatStrFormatter чтобы выбрать строку формата, как показано ниже. Формат строки задается стандартными правилами форматирования строки Python.

     ... y_fmt = tick.FormatStrFormatter('%2.2e') ax.yaxis.set_major_formatter(y_fmt) ...