실제 정규 분포표에 전달하기 전에 원하는 정규화를 적용하는 위조를 Colormap
제공 할 수 있습니다. 여기에 같은 색상 맵 구현 :
import matplotlib as mpl
class ReNormColormapAdaptor(mpl.colors.Colormap):
""" Colormap adaptor that uses another Normalize instance
for the colormap than applied to the mappable. """
def __init__(self,base,cmap_norm,orig_norm=None):
if orig_norm is None:
if isinstance(base,mpl.cm.ScalarMappable):
orig_norm = base.norm
base = base.cmap
else:
orig_norm = mpl.colors.Normalize(0,1)
self._base = base
if (
isinstance(cmap_norm,type(mpl.colors.Normalize))
and issubclass(cmap_norm,mpl.colors.Normalize)
):
# a class was provided instead of an instance. create an instance
# with the same limits.
cmap_norm = cmap_norm(orig_norm.vmin,orig_norm.vmax)
self._cmap_norm = cmap_norm
self._orig_norm = orig_norm
def __call__(self, X, **kwargs):
""" Re-normalise the values before applying the colormap. """
return self._base(self._cmap_norm(self._orig_norm.inverse(X)),**kwargs)
def __getattr__(self,attr):
""" Any other attribute, we simply dispatch to the underlying cmap. """
return getattr(self._base,attr)
이미 [0,1 정규화됩니다됩니다 값 때문에),이 (orig_norm
로 주어진) 이전의 정상화를 취소 할 수 있음을 알 필요가있다. 당신이 unnormalised 값으로 색상 맵을 적용 할 경우 비워 둡니다 :
cmap = ReNormColormapAdaptor(mpl.cm.jet,mpl.colors.LogNorm(vmin,vmax))
이미 ScalarMappable
가있는 경우에, 당신은에서 색상 맵, 대신에 전달할 수있는 칼라 맵, 이전의 정상화와 모두 새로운 정규화 제한이 적용됩니다 :
import matplotlib.pyplot as plt
scalar_mappable = plt.imshow(C);
scalar_mappable.set_cmap(ReNormColormapAdaptor(
scalar_mappable,
mpl.colors.LogNorm
))
그래서 'imshow (data, norm = matplotlib.colors.LogNorm())'이 당신이 찾고있는 것이 아닙니까? 그것은 본질적으로 당신이 당신의 힌트에서 묘사하고있는 것을합니다. 대수적으로 배열을 플로팅하고 싶지만 컬러 바가 선형으로 그려지기를 원합니까? – burnpanck
@burnpanck 아니, 그게 내가하지 * 원하는 *, 나는 logarithmic 작동 autonomous colormap 인스턴스가 필요합니다. 그 이유는 matplotlib 색상 맵을 사용하여 플롯을 생성하는 다른 소프트웨어를 사용하기 때문입니다. – flonk
좋아, 어떤 종류의 소프트웨어, 어떤 방법으로 색상 표를 전달합니까? 그 이유는 선형 대 로그 변환을 적용하여 다른 색상 맵을 단지 래핑하는 사용자 정의'Colormap' 서브 클래스를 쉽게 작성할 수 있기 때문입니다. 그러나 이러한 사용자 지정 클래스를 전달할 수 있는지 여부는 분명하지 않습니다. – burnpanck