2015-09-08 2 views
15

私はいくつかのインタラクティブなプロットを作成しています。カラーバーの凡例を追加したいと思います。私はカラーバーを独自の軸にしたくないので、既存の軸にカラーバーを追加したいと思います。私が見つけたサンプルコードの大部分がカラーバーの新しい軸を作成するので、これを行うのが難しいです。既存の軸にカラーバーを追加する

matplotlib.colorbar.ColorbarBaseを使用して次のコードを試しましたが、これは既存の軸にカラーバーを追加しますが、私には奇妙な結果が生じ、カラーバーの属性を指定する方法がわかりません(たとえば、代わりにmatplotlib.colorbar.ColorbarBasefig.colorbarを使用して

import matplotlib 
import matplotlib.pyplot as plt 
from matplotlib.cm import coolwarm 
import numpy as np 

x = np.random.uniform(1, 10, 10) 
y = np.random.uniform(1, 10, 10) 
v = np.random.uniform(1, 10, 10) 

fig, ax = plt.subplots() 

s = ax.scatter(x, y, c=v, cmap=coolwarm) 

matplotlib.colorbar.ColorbarBase(ax=ax, cmap=coolwarm, values=sorted(v), 
           orientation="horizontal") 

はまだ私が欲しいかなりのものを私に与えていない、と私はまだカラーバーの属性を調整する方法がわからない)に配置され、どのようなサイズ、それはです。

enter image description here

fig.colorbar(s, ax=ax, cax=ax) 
のは、私は、プロットの上部に約半分伸ばし、左上隅にあるカラーバーを持ちたいとしましょう。それをどうやってやりますか?

LineCollectionを使用して、カスタム機能を作成する方がよいでしょうか?

+0

私はこれへの答えを持っていません。しかし、なぜ新しい軸を与えるのではなく、カラーバーを既存の軸の一部にしたいのですか? – tnknepp

+0

@tnknepp私は、ズーム/パン、プロットのオン/オフなどを使ってインタラクティブなプロットを作成しています。カラーバーの新しい軸を作成する必要はありません。 –

+0

なぜ ' fig.colorbar(ax = ax) '? – tom

答えて

18

カラーバーには独自の軸が必要です。ただし、以前のものと重複する軸を作成することはできます。次に、cax kwargを使用して、fig.colorbarに新しい軸を使用するように指示します。例えば

import numpy as np 
import matplotlib.pyplot as plt 

data = np.arange(100, 0, -1).reshape(10, 10) 

fig, ax = plt.subplots() 
cax = fig.add_axes([0.27, 0.8, 0.5, 0.05]) 

im = ax.imshow(data, cmap='gist_earth') 
fig.colorbar(im, cax=cax, orientation='horizontal') 
plt.show() 

enter image description here

+1

これは3d軸では動作しません – derchambers

21

この技術は、通常、図には、複数の軸のために使用されます。この文脈では、サイズがimshowの結果に対応するカラーバーが必要になることがよくあります。これはaxes gridツールキットで簡単に実現できます。

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1 import make_axes_locatable 

data = np.arange(100, 0, -1).reshape(10, 10) 

fig, ax = plt.subplots() 
divider = make_axes_locatable(ax) 
cax = divider.append_axes('right', size='5%', pad=0.05) 

im = ax.imshow(data, cmap='bone') 

fig.colorbar(im, cax=cax, orientation='vertical') 
plt.show() 

Image with proper colorbar in size

+2

この方法では、軸にベースマップが含まれていたときに問題が解決されました(以前の答えはベースマップを伸ばしていました)。 – blaylockbk

関連する問題