2016-04-08 4 views
0

2つのサブプロットを1つの図に描きたい、1つは単純な線グラフy = f(x)で、もう1つは2Dヒートマップlike the one shown hereです。線グラフとヒートマップを含むPythonサブプロット

しかし、2番目のプロットにカラーバーを追加したいとします。

from pylab import* 

fig = figure() 
sub1 = fig.add_subplot(121) 
sub2 = fig.add_subplot(122) 

x=linspace(0,10,200) 
y=exp(x) 
sub1.plot(x,y) 

x=linspace(-10,10,200) 
y=linspace(-10,10,200) 
xx,yy=meshgrid(x,y) 
z=sin(xx)+cos(yy) 
sub2.imshow(z) 
sub2.colorbar() 

show() 

しかし、これはエラーメッセージ

Traceback (most recent call last): 
File "ques2.py", line 16, in <module> 
    sub2.colorbar() 
AttributeError: 'AxesSubplot' object has no attribute 'colorbar' 

私は何を行うことができますを与える:私が使用するコードはありますか?

サブプロットパラメータを手動で調整せずに取得したプログラムの出力is shown here。 2つのプロットは非常に不等サイズです。プログラム自体に必要なサブプロット画像のサイズについて言及する方法はありますか?

答えて

0

カラーバーを追加するときは、imshowが返す画像に変数を割り当てるのが一般的です。例えば、img = sub2.imshow(z)です。次に、plt.colorbarに画像とカラーバーの軸(あなたの場合はplt.colorbar(img, ax=sub2)を伝えて、画像にカラーバーを追加できます。

import numpy as np 
import matplotlib.pyplot as plt 

fig = plt.figure() 
sub1 = fig.add_subplot(121) 
sub2 = fig.add_subplot(122) 

x = np.linspace(0,10,200) 
y = np.exp(x) 
sub1.plot(x,y) 

x = np.linspace(-10,10,200) 
y = np.linspace(-10,10,200) 
xx, yy = np.meshgrid(x,y) 
z = np.sin(xx)+np.cos(yy) 

img = sub2.imshow(z) 
plt.colorbar(img, ax=sub2) 

サブプロットのサイズを変更する方法については、this postを参照してください。

+0

カラーバーをシンナーにする方法はありますか?私はそれが多くのスペースを消費していると思うので。 – kanayamalakar

+0

colorbarには、サイズをカスタマイズするための素敵なパラメータグループがあります:分数、縮小、およびアスペクト。詳細については、[colorbar.make_axes()](http://matplotlib.org/api/colorbar_api.html#matplotlib.colorbar.make_axes)を参照してください。基本的には、満足するまで、必要に応じてこれらのパラメータを微調整してください。表に記載されているその他のパラメータは、位置/方向をカスタマイズするためのものです。 – lanery

関連する問題