0

matplotlibには説明できない奇妙な動作があり、誰かが何が起こっているのかを見ることができるかどうか疑問に思っていました。本質的に起こっていることは、私が以前は2つの数字であったものを1つに配置しようとしているということです。これを行うにGridSpecは、図の左半分用と右半分用の2つのオブジェクトを作成します。左側を描画してを追加しますが、右側でcolorbar最初のものを選択すると、左側の図がカラーバーの下で右にシフトします。最後の2行を除いてサンプルコードを実行しようとすると、期待どおりの結果が得られますが、全体を実行すると、左側のプロットがシフトします。どうしたの?subplot

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
4

1 に答える 1

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()

ここに画像の説明を入力してください

于 2012-05-12T01:14:15.373 に答える