2012-02-23 5 views
3

Pythonスクリプトでは、2D NumPyフロート配列のセットがあります(n1、n2、n3、n4とします)。このような配列ごとに、私はoffset_i_xとoffset_i_yの2つの整数値を持っています(iを1,2,3,4で置き換えます)。単一のmatplotlib図の複数のプロット

現在、私は次のスクリプトを使用して1つのnumpyのアレイ用の画像を作成することができるよ:

def make_img_from_data(data) 
     fig = plt.imshow(data, vmin=-7, vmax=0) 
     fig.set_cmap(cmap) 
     fig.axes.get_xaxis().set_visible(False) 
     fig.axes.get_yaxis().set_visible(False) 
     filename = "my_image.png" 
     plt.savefig(filename, bbox_inches='tight', pad_inches=0) 
     plt.close() 

今、私は、各アレイは大きな画像のタイルであることを考慮したいと応じて配置する必要がありますoffset_i_x/yの値に変更して、最終的に4の代わりに1つのFigureを書きます(私の例では)。 MatplotLibとPythonの一般的な新機能です。どうやってやるの?

また、上記のスクリプトは元のNumPy配列のサイズにかかわらず、480x480ピクセルの画像を生成することに気付きました。どのようにして結果の画像のサイズを制御できますか?私が正しく理解していれば

おかげ

答えて

0

は、あなたがsubplot秒を探しているように見えます。例についてはthumbnail galleryをご覧ください。

4

matplotlib.pyplotのadd_axes機能を検討してください。

以下は、達成したいことに基づいた汚い例です。 例が機能するように、オフセットの値を選択しました。あなたは、各画像のオフセットの値を数値の端数でどのように変換するかを理解しなければなりません。

import numpy as np 
import matplotlib.pyplot as plt 

def make_img_from_data(data, offset_xy, fig_number=1): 
    fig.add_axes([0+offset_xy[0], 0+offset_xy[1], 0.5, 0.5]) 
    plt.imshow(data) 

# creation of a dictionary with of 4 2D numpy array 
# and corresponding offsets (x, y) 

# offsets for the 4 2D numpy arrays 
offset_a_x = 0 
offset_a_y = 0 
offset_b_x = 0.5 
offset_b_y = 0 
offset_c_x = 0 
offset_c_y = 0.5 
offset_d_x = 0.5 
offset_d_y = 0.5 

data_list = ['a', 'b', 'c', 'd'] 
offsets_list = [[offset_a_x, offset_a_y], [offset_b_x, offset_b_y], 
       [offset_c_x, offset_c_y], [offset_d_x, offset_d_y]] 

# dictionary of the data and offsets 
data_dict = {f: [np.random.rand(12, 12), values] for f,values in zip(data_list, offsets_list)} 

fig = plt.figure(1, figsize=(6,6)) 

for n in data_dict: 
    make_img_from_data(data_dict[n][0], data_dict[n][1]) 

plt.show() 

生成する:

this result http://i41.tinypic.com/33wnrqs.png

関連する問題