0

matplotlib の imshow を使用して、Python でカーペットプロットを作成しています。これが私のコードです:

import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cm as cm

DATA = np.array([[0,0,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 9,0,0,1,2,4,5,5,4,3,2,0],[ 0,0,0,1,2,4,5,5,4,3,2,0],[ 0,0,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0],[ 0,3,0,1,2,4,5,5,4,3,2,0] ])

#plt.imshow(DATA, interpolation='nearest', cmap=cm.bwr)
DATA.shape

fig = plt.figure(figsize=(5.5,6),dpi=300)
ax = fig.add_subplot(111)
plot = ax.imshow(DATA, interpolation='nearest', cmap=cm.rainbow)


cb = fig.colorbar(plot)
xlabel = ax.set_xlabel('Days')
ylabel= ax.set_ylabel('bla bla bla')
fig.savefig('carpet_test.png',bbox_extra_artists=[xlabel], bbox_inches='tight')

出力は次のとおりです。

長いDATAのカーペットプロット

しかし、DATA を短縮して同じコードを使用すると、出力は次のようになります。

短いDATAのカーペットプロット

1 と 2 の唯一の違いは の長さですDATA。問題は、各ピクセルまたはポイントが同じ幅と高さになるように、figsize使用されたをどのように計算できるかということです。plt.figureDATA

グラフの幅は常に同じでなければならず、幅はDATA変わらず、高さだけです。

4

1 に答える 1

0

@Francesco-montesano のコメントのおかげで、解決策を思いつきました。完璧ではありませんが、機能します:

dshape=DATA.shape[0]
pixelsize = 0.8
figsize=np.array(dshape)*pixelsize



fig = plt.figure(figsize=(5.5,figsize),dpi=300)

それを使用して、グラフの高さを動的に調整します。

于 2013-05-07T10:12:13.270 に答える