2017-09-19 17 views
0

ImageGridを使用していくつかのパネルをプロットしようとしています。 grid.cbar_axes[0].colorbar(im)を使用してカラーバーを設定すると、カラーはきれいに見えますが、カラーバーのスケールは2x10^0からNoneに変わります。LogNormとImageGridを使用する場合のMatplotlibのカラーバー

私は何十もの回避策を試しましたが、何も機能しませんでした。ここで私は(私の間違ったバージョン)を作成しようとしているフィギュアです:

enter image description here

残念ながら、私は完全に問題を再現MWEを作ることができませんでした。私はそれを部分的に再現するMWEを作り出しました。私はこのコードを使用する場合:

import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1 import ImageGrid 
from matplotlib.colors import LogNorm 

def get_demo_image(): 
    import numpy as np 
    from matplotlib.cbook import get_sample_data 
    f = get_sample_data("axes_grid/bivariate_normal.npy", asfileobj=False) 
    z = np.load(f) 
    return abs(z), (-3, 4, -4, 3) 

F = plt.figure(figsize=(5.5, 3.5)) 
grid = ImageGrid(F, 111, # similar to subplot(111) 
       nrows_ncols=(1, 3), 
       axes_pad=0.1, 
       add_all=True, 
       label_mode="L", 
       cbar_mode='single' 
       ) 

Z, extent = get_demo_image() # demo image 

im1 = Z 
im2 = Z 
im3 = Z 
vmin, vmax = 1e-3, 1e10 
for i, im in enumerate([im1, im2, im3]): 
    ax = grid[i] 
    imc = ax.pcolormesh(range(15), range(15), im, norm=LogNorm(vmin=vmin, vmax=vmax), linewidth=0, rasterized=True) 

cb=grid.cbar_axes[0].colorbar(imc) 

enter image description here

を私は上限が細かいように見えることを除いて、ほぼ同じ動作を取得します。下限は、私がvminvmaxに使用する値に関係なく、同じ奇妙な動作を示します。

何が起こっているのでしょうか?

答えて

0

official examplegrid[2].cax.colorbar(im)にここに翻訳します cb=grid.cbar_axes[0].colorbar(imc)に似たものを、使用しますが、私はそれも理にかなって、なぜに迷ってしまいました。

代わりに、カラーバーを製造するための通常の方法はまた、引数 とcax(ここではgrid[2].cax)にkeywordargumentとしてカラーバーを製造するための軸として(ここではimc)ScalarMappableでFigureのカラーバーの方法を使用して、ここでは動作します:

cb=F.colorbar(imc, cax=grid[2].cax) 

enter image description here

関連する問題