Python matplotlib colorbar научная нотация базы

Я пытаюсь настроить colorbar на моих графиках matpllotlib contourf. Хотя я могу использовать научную нотацию, я пытаюсь изменить базу обозначений – по существу, чтобы мои тики были в диапазоне (-100,100), а не (-10,10).

Например, это создает простой сюжет …

import numpy as np import matplotlib.pyplot as plt z = (np.random.random((10,10)) - 0.5) * 0.2 fig, ax = plt.subplots() plot = ax.contourf(z) cbar = fig.colorbar(plot) cbar.formatter.set_powerlimits((0, 0)) cbar.update_ticks() plt.show() 

вот так:

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

Тем не менее, я бы хотел, чтобы метка над цветной панелью была 1е-2, а числа в диапазоне от -10 до 10.

Как я могу это сделать?

2 Solutions collect form web for “Python matplotlib colorbar научная нотация базы”

Возможным решением может быть подкласс ScalarFormatter и исправление порядка величины, как в этом вопросе: Установить научную нотацию с фиксированным показателем и значимые цифры для нескольких подзаговоров

Затем вы назовете этот форматировщик с порядком величины как order аргументов, OOMFormatter(-2, mathText=False) . mathText устанавливается в значение false, чтобы получить обозначение из вопроса, т.е. введите описание изображения здесь установив его значение «Истина», введите описание изображения здесь ,

Затем вы можете установить форматтер в colorbar через аргумент format colorbar.

 import numpy as np; np.random.seed(0) import matplotlib.pyplot as plt import matplotlib.ticker class OOMFormatter(matplotlib.ticker.ScalarFormatter): def __init__(self, order=0, fformat="%1.1f", offset=True, mathText=True): self.oom = order self.fformat = fformat matplotlib.ticker.ScalarFormatter.__init__(self,useOffset=offset,useMathText=mathText) def _set_orderOfMagnitude(self, nothing): self.orderOfMagnitude = self.oom def _set_format(self, vmin, vmax): self.format = self.fformat if self._useMathText: self.format = '$%s$' % matplotlib.ticker._mathdefault(self.format) z = (np.random.random((10,10)) - 0.5) * 0.2 fig, ax = plt.subplots() plot = ax.contourf(z) cbar = fig.colorbar(plot, format=OOMFormatter(-2, mathText=False)) plt.show() 

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

Подобно тому, что описано в @ImportanceOfBeingErnes, вы можете использовать FuncFormatter ( docs ), к которому вы просто передаете функцию, чтобы определить метки метки. Это удаляет автоматическую генерацию заголовка 1e-2 для вашей цветной панели, но я полагаю, вы можете вручную добавить это обратно (у меня были проблемы с этим, хотя я смог добавить его сбоку). Используя FuncFormatter , вы можете просто генерировать значения тика строки, которые имеют то преимущество, что не нужно принимать способ, которым python считает, что число должно отображаться.

 import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker as tk z = (np.random.random((10,10)) - 0.5) * 0.2 levels = list(np.linspace(-.1,.1,9)) fig, ax = plt.subplots() plot = ax.contourf(z, levels=levels) def my_func(x, pos): label = levels[pos] return str(label*100) fmt1 = tk.FuncFormatter(my_func) cbar = fig.colorbar(plot, format=fmt1) cbar.set_label("1e-2") plt.show() 

Это создаст сюжет, который выглядит так.

Контурный участок

  • Как установить размер шрифта заголовка рисунка и оси в Matplotlib?
  • Сортировка данных для отображения максимального значения barchart на python
  • расположение и размер цветной панели matplotlib
  • Обозначение тепловой карты с текстом
  • Создание таблиц в matplotlib
  • gnuplot против Matplotlib
  • Индивидуальные альфа-значения в диаграмме рассеяния / Matplotlib
  • Как установить xlim и ylim для подзадачи в matplotlib
  • Отображение диапазона Matplotlib yaxis с использованием абсолютных значений, а не значений смещения?
  • Как применить некоторую функцию к python meshgrid?
  • Как я могу показать цифры отдельно в matplotlib?
  • Python - лучший язык программирования в мире.