изменить форматирование тиков цветовой панели - PullRequest
0 голосов
/ 21 апреля 2020

Я бы хотел изменить формат тиков цветовой шкалы на некоторых графиках, которые я генерирую.

enter image description here

Результат, который я ищу, - это результат, достигнутый здесь для контурного графика ( Matplotlib Colorbar Ticks Формат Mathtext )

Это MWE, чтобы увидеть мою проблему:

from matplotlib import pyplot as plt
from mpl_toolkits import axes_grid1
from matplotlib import colors, ticker
import numpy as np

def add_colorbar(im, aspect=15, pad_fraction=0.5, **kwargs):
    """Add a vertical color bar to an image plot."""
    divider = axes_grid1.make_axes_locatable(im.axes)
    width = axes_grid1.axes_size.AxesY(im.axes, aspect=1./aspect)
    pad = axes_grid1.axes_size.Fraction(pad_fraction, width)
    current_ax = plt.gca()
    cax = divider.append_axes("right", size=width, pad=pad)
    plt.sca(current_ax)
    cbar = im.axes.figure.colorbar(im, cax=cax, **kwargs)
    cbar.ax.yaxis.set_major_formatter(ticker.ScalarFormatter(useMathText=True, useOffset=True))
    cbar.ax.ticklabel_format(style='sci', scilimits=(0, 0))
    return cbar

im = plt.imshow(np.random.uniform(8000, 12000, (10,10)), norm=colors.LogNorm(),cmap=plt.cm.viridis)
cbar = add_colorbar(im)

plt.show()

1 Ответ

1 голос
/ 21 апреля 2020

ticklabel_format(..., scilimits=(m, n) может использоваться для принудительного использования научного формата c для степеней 10 вне диапазона между m и n. С (0,0) scientifi c формат всегда будет использоваться.

Если вы используете lognorm, цветовая панель получает как основные, так и второстепенные отметки, особенно для отображения форматирования журнала. Вы можете сначала изменить их формат и положение на стандартные тики, как показано ниже:

from matplotlib import pyplot as plt
from mpl_toolkits import axes_grid1
from matplotlib import ticker
from matplotlib import colors
import numpy as np

def add_colorbar(im, aspect=15, pad_fraction=0.5, **kwargs):
    """Add a vertical color bar to an image plot."""
    divider = axes_grid1.make_axes_locatable(im.axes)
    width = axes_grid1.axes_size.AxesY(im.axes, aspect=1./aspect)
    pad = axes_grid1.axes_size.Fraction(pad_fraction, width)
    current_ax = plt.gca()
    cax = divider.append_axes("right", size=width, pad=pad)
    plt.sca(current_ax)
    cbar = im.axes.figure.colorbar(im, cax=cax, **kwargs)
    cbar.ax.yaxis.set_major_locator(ticker.AutoLocator())
    cbar.ax.yaxis.set_minor_locator(ticker.AutoLocator())
    cbar.ax.yaxis.set_major_formatter(ticker.ScalarFormatter(useMathText=True, useOffset=True))
    cbar.ax.xaxis.set_major_formatter(ticker.ScalarFormatter())
    cbar.ax.ticklabel_format(style='sci', scilimits=(0, 0))
    return cbar

im = plt.imshow(np.random.uniform(8000, 12000, (10,10)), norm=colors.LogNorm())
cbar = add_colorbar(im)

plt.show()

example plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...