2013-08-01 69 views
16

私は4 imshowサブプロットを作成したいが、それらはすべて同じカラーマップを共有している。 Matplotlibは、マトリックスのエントリに応じてカラーマップ上のスケールを自動的に調整します。たとえば、私の行列の1つがすべて10のエントリーを持ち、もう1つのエントリーが5に等しいすべてのエントリを持ち、Greysのカラーマップを使用すると、私のサブプロットの1つは完全に黒く、もう1つは完全に灰色になります。しかし、どちらも完全に黒くなってしまいます。すべてのサブプロットをカラーマップ上で同じ縮尺で共有するにはどうすればよいですか?同じカラーバーのImshowサブプロット

+0

この投稿にはあなたに役立つ回答があるようです。 http://stackoverflow.com/questions/3373256/set-colorbar-range-in-matplotlib – bserra

+0

[Matplotlib 2 Subplots、1 Colorbar]の可能な複製(http://stackoverflow.com/questions/13784201/matplotlib-2- subplots-1-colorbar) –

答えて

27

この権利を得るには、同じ強度スケールのすべての画像を持つ必要があります。そうでなければ、colorbar()の色は無意味です。これを行うには、のvminvmax引数を使用し、それらの画像がすべて同じであることを確認してください。

例えば、表示したい値の範囲は、次を使用することができ、0から10に行く場合:

import pylab as plt 
import numpy as np 
my_image1 = np.linspace(0, 10, 10000).reshape(100,100) 
my_image2 = np.sqrt(my_image1.T) + 3 
subplot(1, 2, 1) 
plt.imshow(my_image1, vmin=0, vmax=10, cmap='jet', aspect='auto') 
plt.subplot(1, 2, 2) 
plt.imshow(my_image2, vmin=0, vmax=10, cmap='jet', aspect='auto') 
plt.colorbar() 

enter image description here

+0

2番目の軸が狭いのであまり美しくありません。代わりにhttp://stackoverflow.com/questions/13784201/matplotlib-2-subplots-1-colorbarを参照してください。 –

+0

@RuggeroTurra Trueですが、 = 'auto''となり、いずれの場合もサブプロットスペース(またはgridspecなど)を変更することで調整できます。受け入れられた答えでは、カラーバーをリンクすると、軸と同じ高さではありませんので、まだ調整が必要です。 – tiago

1

それはあなたが事前に知っていないのかもしれデータの範囲はわかりますが、どういう形であれ互換性があることがわかります。その場合、matplotlibに最初のプロットの範囲を選択させ、残りのプロットに対して同じ範囲を使用することができます。ここであなたがそれを行う方法があります。鍵は限界を得ることです。properties()['clim']

import numpy as np 
import matplotlib.pyplot as plt 

my_image1 = np.linspace(0, 10, 10000).reshape(100,100) 
my_image2 = np.sqrt(my_image1.T) + 3 

fig, axes = plt.subplots(nrows=1, ncols=2) 
im = axes[0].imshow(my_image1) 
clim=im.properties()['clim'] 
axes[1].imshow(my_image2, clim=clim) 

fig.colorbar(im, ax=axes.ravel().tolist(), shrink=0.5) 

plt.show() 
+0

最初のプロットの値の範囲が2番目のプロットの範囲よりも小さい場合、これはうまくいかないでしょう。 – naught101

+0

合意。しかし、それは私が本文で説明したものです。これは、最良の範囲がわからないが、最初のプロットの自動範囲が残りのプロットの範囲に収まると仮定した場合に機能します。 –

関連する問題