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

Формат метки оси matplotlib

У меня проблема с форматом меток метки на оси. Я отключил смещение от y_axis:

ax1.ticklabel_format(style = 'sci', useOffset=False)

и попытался представить его в научном формате, но все, что я получаю, это:

0.00355872

но я ожидал чего-то вроде:

3.55872...E-2

или аналогичный.

что я действительно хочу, это что-то вроде:

3.55872... (on the tick label)
x 10^2  (or something similar - on the axis label)

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

Альтернативой было бы размещение смещения y_axis как метки, но я также не знаю, как это сделать.

4b9b3361

Ответ 1

Существует несколько способов сделать это

Вы можете просто настроить пределы мощности (doc)

ax1.xaxis.get_major_formatter().set_powerlimits((0, 1))

который устанавливает полномочия, в которых ScalerFormatter переключается на научную нотацию

Или, вы можете использовать FuncFormatter, который дает вам большой контроль (но вы можете удалить свою ногу).

from matplotlib import ticker

scale_pow = 2
def my_formatter_fun(x, p):
    return "%.2f" % (x * (10 ** scale_pow))
ax1.get_xaxis().set_major_formatter(ticker.FuncFormatter(my_formatter_fun))
ax1.set_xlabel('my label ' + '$10^{{{0:d}}}$'.format(scale_pow))

FuncFormatter (doc) использует 2 аргументную функцию, которая возвращает строку и использует эту функцию для форматирования метки. (Имейте в виду, это также изменит, как значения отображаются в углу интерактивных фигур). Второй аргумент - это "позиция", которая является аргументом, переданным, когда форматирование создает метки. Вы можете смело игнорировать его, но вы должны принять его (иначе вы получите ошибки от неправильного количества аргументов). Это является следствием унифицированного API всех форматировщиков и использования форматирования для отображения местоположения мыши в интерактивном режиме.

Ответ 2

Вы также должны указать ограничения по оси и порогу:

ax1.ticklabel_format(axis='y', style='sci', scilimits=(-2,2))

Это будет использовать формат sci на оси y, если цифры не соответствуют границам [0.01, 99].