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: сплошная цветовая палитра между двумя линиями
  • Dot-boxplots из DataFrames
  • разные илы для общих осей в коробке pandas boxplot
  • Диаграмма Python Matplotlib Venn
  • Фигура Matplotlib не закрывается после воскрешения
  • matplotlib и показатель прозрачности
  • Можно использовать pyplot без DISPLAY?
  • Python - лучший язык программирования в мире.