2017-02-22 7 views
6

私はで図を直接作成したときに、図にカラーバーを追加する方法を知っています。hist2dプロットのカラーバーを追加する方法

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

# normal distribution center at x=0 and y=5 
x = np.random.randn(100000) 
y = np.random.randn(100000) + 5 

# This works 
plt.figure() 
plt.hist2d(x, y, bins=40, norm=LogNorm()) 
plt.colorbar() 

しかし、なぜ次が動作しない、と私はそれを動作させるためにcolorbar(..)の呼び出しに追加する何が必要でしょう。

fig, ax = plt.subplots() 
ax.hist2d(x, y, bins=40, norm=LogNorm()) 
fig.colorbar() 
# TypeError: colorbar() missing 1 required positional argument: 'mappable' 

fig, ax = plt.subplots() 
ax.hist2d(x, y, bins=40, norm=LogNorm()) 
fig.colorbar(ax) 
# AttributeError: 'AxesSubplot' object has no attribute 'autoscale_None' 

fig, ax = plt.subplots() 
h = ax.hist2d(x, y, bins=40, norm=LogNorm()) 
plt.colorbar(h, ax=ax) 
# AttributeError: 'tuple' object has no attribute 'autoscale_None' 

答えて

6

ほとんどの場合、3番目のオプションがあります。 mappableオブジェクトをcolorbarに渡す必要がありますので、カラーバーに与えるカラーマップとリミットを知ることができます。それはhist2Dの場合などAxesImageまたはQuadMesh

することができ、あなたのhに返されるタプルはそのmappable、だけでなく、いくつかの他のものがあまりにも含まれています。 docsから

戻り値: 戻り値は(カウント、xedges、yedges、画像)です。

したがって、カラーバーを作成するには、Imageが必要です。

あなたのコードを修正するには、次の

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

# normal distribution center at x=0 and y=5 
x = np.random.randn(100000) 
y = np.random.randn(100000) + 5 

fig, ax = plt.subplots() 
h = ax.hist2d(x, y, bins=40, norm=LogNorm()) 
plt.colorbar(h[3], ax=ax) 

counts, xedges, yedges, im = ax.hist2d(x, y, bins=40, norm=LogNorm()) 
plt.colorbar(im, ax=ax) 
+0

'fig.colorbar(IM)は'も働き、その答えの残りの部分とより一致ようです。 – ThomasH

関連する問題