Цветная панель с пользовательским LogNorm не работает должным образом.Python

Программы на Python
Anonymous
Цветная панель с пользовательским LogNorm не работает должным образом.

Сообщение Anonymous »

Я изменил LogNorm из matplotlib.colors таким образом, чтобы среднюю точку логарифмической шкалы можно было установить вручную. Двухмерная цветовая диаграмма соответствующим образом меняется с новой нормализованной цветовой картой, но цветовая полоса остается той же, что и старая немодифицированная цветовая карта.
Подобный код уже существует:
Смещенная логарифмическая цветовая полоса, белый цвет. смещение цвета к центру
С помощью следующего кода:

Код: Выделить всё

import numpy as np
import matplotlib.pyplot as plt
from  matplotlib.colors import LogNorm

x,y = np.meshgrid(np.linspace(-3,0,19), np.arange(10))
f = lambda x,y : 10**x*(1+y)
z = f(x,y)

fig, (ax,ax2) = plt.subplots(ncols=2, figsize=(12,4.8))

im = ax.pcolormesh(x,y,z, cmap="RdBu_r", norm=LogNorm(vmin=z.min(), vmax=z.max()))
fig.colorbar(im, ax=ax)
ax.set_title("LogNorm")

class MidPointLogNorm(LogNorm):
def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
LogNorm.__init__(self,vmin=vmin, vmax=vmax, clip=clip)
self.midpoint=midpoint
def __call__(self, value, clip=None):
# I'm ignoring masked values and all kinds of edge cases to make a
# simple example...
x, y = [np.log(self.vmin), np.log(self.midpoint), np.log(self.vmax)], [0, 0.5, 1]
return np.ma.masked_array(np.interp(np.log(value), x, y))

im2 = ax2.pcolormesh(x,y,z, cmap="RdBu_r",
norm=MidPointLogNorm(vmin=z.min(), vmax=z.max(), midpoint=1))
fig.colorbar(im2, ax=ax2)
ax2.set_title("MidPointLogNorm")
plt.show()
Изображение

Код больше не работает должным образом. Вы можете видеть, что цветовые 2D-графики имеют разные цветовые карты, но цветовые полосы одинаковы.
Как решить эту проблему? Есть ли проблема с matplotlib?


Подробнее здесь: https://stackoverflow.com/questions/785 ... k-properly

Вернуться в «Python»