2012-05-11 6 views
0

matplotlibで説明できない奇妙な動作がありました。誰かが何が起こっているのかを知ることができるのだろうかと思っていました。本質的に起こっているのは、私が2つの数字であるものを1つにしようとしているということです。私は2つのGridSpecオブジェクトを作成することで、図形の左半分と右辺のオブジェクトを作成します。私は左手を描いてcolorbarを追加しますが、最初にsubplotを選択すると、左側の数字がのカラーバーの右に移動します。最後の2行を除いてサンプルコードを実行しようとすると、期待どおりに表示されますが、全体を実行すると、左のプロットがシフトします。どうしたの?Matplotlibの不注意なシフトプロット

import matplotlib.gridspec as gridspec 
import numpy as np 
import pylab as pl 

scores = np.array([[ 0.32  , 0.32  , 0.32  , 0.32  , 0.32  , 
     0.32  , 0.32  , 0.32  , 0.32  ], 
     [ 0.32  , 0.32  , 0.32  , 0.49333333, 0.85333333, 
     0.92666667, 0.32  , 0.32  , 0.32  ], 
     [ 0.32  , 0.32  , 0.51333333, 0.87333333, 0.96  , 
     0.95333333, 0.89333333, 0.44  , 0.34  ], 
     [ 0.32  , 0.51333333, 0.88  , 0.96  , 0.96666667, 
     0.95333333, 0.90666667, 0.47333333, 0.34  ], 
     [ 0.51333333, 0.88  , 0.96  , 0.96  , 0.96  , 
     0.96  , 0.90666667, 0.47333333, 0.34  ], 
     [ 0.88  , 0.96  , 0.96  , 0.96  , 0.94666667, 
     0.96  , 0.90666667, 0.47333333, 0.34  ], 
     [ 0.96  , 0.96  , 0.96666667, 0.96  , 0.94  , 
     0.96  , 0.90666667, 0.47333333, 0.34  ], 
     [ 0.96  , 0.96666667, 0.96666667, 0.94666667, 0.94  , 
     0.96  , 0.90666667, 0.47333333, 0.34  ], 
     [ 0.96666667, 0.97333333, 0.96  , 0.94666667, 0.94  , 
     0.96  , 0.90666667, 0.47333333, 0.34  ], 
     [ 0.96666667, 0.96666667, 0.96666667, 0.94666667, 0.94  , 
     0.96  , 0.90666667, 0.47333333, 0.34  ], 
     [ 0.95333333, 0.96  , 0.96666667, 0.94666667, 0.94  , 
     0.96  , 0.90666667, 0.47333333, 0.34  ]]) 
C_range = 10.0 ** np.arange(-2, 9) 
gamma_range = 10.0 ** np.arange(-5, 4) 

pl.figure(0, figsize=(16,6)) 
gs = gridspec.GridSpec(1,1) 
gs.update(left=0.05, right=0.45, bottom=0.15, top=0.95) 
pl.subplot(gs[0,0]) 
pl.imshow(scores, interpolation='nearest', cmap=pl.cm.spectral) 
pl.xlabel('gamma') 
pl.ylabel('C') 
pl.colorbar() 
pl.xticks(np.arange(len(gamma_range)), gamma_range, rotation=45) 
pl.yticks(np.arange(len(C_range)), C_range) 
gs = gridspec.GridSpec(3,3) 
gs.update(left=0.5, right=0.95, bottom=0.05, top=0.95) 
pl.subplot(gs[0,0]) # here's where the shift happens 

答えて

1

シフトは、それは動作しますが、それは不快なハックのビットです

pl.figure(0, figsize=(16,6)) 
gs = gridspec.GridSpec(1,1) 
gs.update(left=0.05, right=0.45, bottom=0.15, top=0.95) 
ax = pl.subplot(gs[0,0]) # save the axes to ax 
pl.imshow(scores, interpolation='nearest', cmap=pl.cm.spectral) 
pl.xlabel('gamma') 
pl.ylabel('C') 
pl.xticks(np.arange(len(gamma_range)), gamma_range, rotation=45) 
pl.yticks(np.arange(len(C_range)), C_range) 
gs = gridspec.GridSpec(3,3) 
gs.update(left=0.5, right=0.95, bottom=0.05, top=0.95) 
pl.subplot(gs[0,0]) # here's where the shift happens 

pl.colorbar(ax=ax) # create colorbar for ax 
pl.show() 

enter image description here

+0

起こる場所#はここだ後にあなたがカラーバーを作成することができます。ありがとう。 – duckworthd

関連する問題