2016-06-22 21 views
0

私は、次のしている仕事はどのよう:私は55はそれが広い5つのサブプロットと5つのサブプロットの深さのグリッドを作成していることを意味していることを想像してサブプロットのインデックスは、

import matplotlib.pyplot as plt 

fig = plt.figure() 

for i in range(10): 
    ax = fig.add_subplot(551 + i) 
    ax.plot([1,2,3,4,5], [10,5,10,5,10], 'r-') 

- その25の要求を満たすことができますサブプロット? convienceの速記表記で

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-118-5775a5ea6c46> in <module>() 
    10 
    11 for i in range(10): 
---> 12  ax = fig.add_subplot(551 + i) 
    13  ax.plot([1,2,3,4,5], [10,5,10,5,10], 'r-') 
    14 

/home/blah/anaconda/lib/python2.7/site-packages/matplotlib/figure.pyc in add_subplot(self, *args, **kwargs) 
    1003      self._axstack.remove(ax) 
    1004 
-> 1005    a = subplot_class_factory(projection_class)(self, *args, **kwargs) 
    1006 
    1007   self._axstack.add(key, a) 

/home/blah/anaconda/lib/python2.7/site-packages/matplotlib/axes/_subplots.pyc in __init__(self, fig, *args, **kwargs) 
    62      raise ValueError(
    63       "num must be 1 <= num <= {maxn}, not {num}".format(
---> 64        maxn=rows*cols, num=num)) 
    65     self._subplotspec = GridSpec(rows, cols)[int(num) - 1] 
    66     # num - 1 for converting from MATLAB to python indexing 

ValueError: num must be 1 <= num <= 30, not 0 

答えて

2

55:私は25個の可能なプロットがOK、それらの反復を収容することを(誤って明らかに)と思ったが、私は、次の取得 -

ザ・ループのためだけで10回反復します5行5列あることを意味します。しかし、簡略表記は、1桁の整数(つまり、nrows、ncols、およびplot_numberがすべて10未満の整数)に対してのみ機能します。

あなたは完全な表記にして展開することができます(つまり、カンマを使用します。add_subplot(nrows, ncols, plot_number))をし、すべてがあなたのために正常に動作します:

for i in range(10): 
    ax = fig.add_subplot(5, 5, 1 + i) 
    ax.plot([1,2,3,4,5], [10,5,10,5,10], 'r-') 

ドキュメントからplt.subplotため(fig.add_subplotと同じ引数を使用する):

典型的なコールサイン:

subplot(nrows, ncols, plot_number) 

NROWSとNCO lsは概念を概念的にnrows副軸に分割するために使用され、 plot_numberは、この 関数が概念上のグリッド内で作成する特定のサブプロットを識別するために使用されます。 plot_numberは から始まり、最初に行を増分し、最大でnrows * ncolsになります。場合

NROWS、ncolsのとplot_numberが利便性が存在し、すべての10未満であり、3桁の数が数百NROWSを表し、十 ncolsのを表し、代わり を与えることができるようにと単位はplot_numberを表します。

1

トムはあなたの質問に答えましたが、この種の状況ではfig, axs = plt.subplots(n, m)を使用する必要があります。これにより、nの行とサブプロットのmの列を持つ新しい図形が作成されます。 figが作成された図形です。 axsは2D配列の配列で、配列の各要素は図の対応する位置にあるサブプロットです。したがって、右上の要素axsは、図の右上のサブプロットです。サブプロットには、通常の索引付けを使用してアクセスすることも、ループバックすることもできます。

だからあなたのケースで私は、これは一般的に滑らかな印象の方法です同意

import matplotlib.pyplot as plt 

# axs is a 5x5 numpy array of axes objects 
fig, axs = plt.subplots(5, 5) 

# "ravel" flattens the numpy array without making a copy 
for ax in axs.ravel(): 
    ax.plot([1,2,3,4,5], [10,5,10,5,10], 'r-') 
+0

を行うことができます。しかし、これは5x5グリッドに25のサブプロットをすべて作成します.OPのコードでは最初の10だけが生成されます。あなたのコードは質問の内容を正確に再現しません。 – tom

関連する問題