2013-03-15 12 views
5

以下はmatplotlibで作成した図です。問題はかなり明らかです - ラベルが重なり、全体が判読不能です。これらのサブプロットで重複するラベルについてはどうすればよいですか?

enter image description here

私は、各サブプロットのためtight_layoutを呼び出してみましたが、これは私のipython-ノートカーネルをクラッシュします。

レイアウトを修正するにはどうすればよいですか?受け入れ可能なアプローチには、各サブプロットのxlabel、ylabel、およびtitleを固定することが含まれますが、別の(おそらくより良い)アプローチは、Figure全体の単一のxlabel、ylabelおよびtitleを持つことです。

ここで私は上記のサブプロットを生成するために使用されるループです:

更新
for i, sub in enumerate(datalist): 
    subnum = i + start_with 
    subplot(3, 4, i) 

    # format data (sub is a PANDAS dataframe) 
    xdat = sub['x'][(sub['in_trl'] == True) & (sub['x'].notnull()) & (sub['y'].notnull())] 
    ydat = sub['y'][(sub['in_trl'] == True) & (sub['x'].notnull()) & (sub['y'].notnull())] 

    # plot 
    hist2d(xdat, ydat, bins=1000) 
    plot(0, 0, 'ro') # origin 

    title('Subject {0} in-Trial Gaze'.format(subnum)) 
    xlabel('Horizontal Offset (degrees visual angle)') 
    ylabel('Vertical Offset (degrees visual angle)') 

    xlim([-.005, .005]) 
    ylim([-.005, .005]) 
    # tight_layout # crashes ipython-notebook kernel 

show() 

わかりましたので、ImageGridが移動するための方法のようですが、私の数字はまだ少しを探していますグラグラ:

enter image description here

は、ここで私が使用したコードです:

fig = figure(dpi=300) 
grid = ImageGrid(fig, 111, nrows_ncols=(3, 4), axes_pad=0.1) 

for gridax, (i, sub) in zip(grid, enumerate(eyelink_data)): 
    subnum = i + start_with 

    # format data 
    xdat = sub['x'][(sub['in_trl'] == True) & (sub['x'].notnull()) & (sub['y'].notnull())] 
    ydat = sub['y'][(sub['in_trl'] == True) & (sub['x'].notnull()) & (sub['y'].notnull())] 

    # plot 
    gridax.hist2d(xdat, ydat, bins=1000) 
    plot(0, 0, 'ro') # origin 

    title('Subject {0} in-Trial Gaze'.format(subnum)) 
    xlabel('Horizontal Offset\n(degrees visual angle)') 
    ylabel('Vertical Offset\n(degrees visual angle)') 

    xlim([-.005, .005]) 
    ylim([-.005, .005]) 

show() 
+0

がクックブックの例があります –

+0

fyi: 'tight_layout'は図形のインスタンスで呼び出され、軸は呼び出されません。しかし、 'ImageGrid'は最善の方法です.IMO –

+0

@PaulH、ack right。ナイスキャッチ!ありがとう!編集:それは、明示的な例外を発生させると思うだろうと言った。/ – blz

答えて

3

希望するImageGridtutorial)。

最初の例では、そのリンクから直接引き上げ(軽く変更):(実際には、いくつかの例)http://www.scipy.org/Cookbook/Matplotlib/Multiple_Subplots_with_One_Axis_Label:

import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1 import ImageGrid 
import numpy as np 

im = np.arange(100) 
im.shape = 10, 10 

fig = plt.figure(1, (4., 4.)) 
grid = ImageGrid(fig, 111, # similar to subplot(111) 
       nrows_ncols = (2, 2), # creates 2x2 grid of axes 
       axes_pad=0.1, # pad between axes in inch. 
       aspect=False, # do not force aspect='equal' 
       ) 

for i in range(4): 
    grid[i].imshow(im) # The AxesGrid object work as a list of axes. 

plt.show() 
+0

すごい!私は数分でこれを試してみるつもりです! – blz

+0

あなたが示唆したように 'ImageGrid'を使ってみましたが、私はまだ変な出力を得ています。私の軸のサイズが適切ではなく、xlimsとylimsは考慮されていません - 私はサンプルコードと新しい人物で質問を更新しました。何かご意見は? – blz

+0

@blz編集を参照してください。 – tacaswell

関連する問題