2017-10-21 6 views

答えて

4

print(type(axes)) 
> <type 'numpy.ndarray'> 
print(axes.shape) 
> (3L, 2L) 

axes.flatではない、またaxesが軸のnumpyの配列である、this question

ここ
import matplotlib.pyplot as plt 

fig, axes = plt.subplots(ncols=2,nrows=3, sharex=True, sharey=True) 

for i, ax in enumerate(axes.flat): 
    ax.scatter([i//2+1, i],[i,i//3]) 

plt.show() 

を参照してください、我々はplt.subplotsと、いくつかの軸を作成し、最小限の例を、見てみましょう関数の属性です。numpy.ndarraynumpy.ndarray.flat

ndarray.flat アレイ上の1次元イテレータ。
これはnumpy.flatiterインスタンスです。これは、Pythonの組み込みイテレータオブジェクトと同様ですが、サブクラスではありません。

例:数字2 3 4 5 6 7を印刷し

import numpy as np 

a = np.array([[2,3], 
       [4,5], 
       [6,7]]) 

for i in a.flat: 
    print(i) 

アレイ全体interatorなので、あなたはそのようなこと、その配列から次の軸を、もたらすであろう各反復について

for i, ax in enumerate(axes.flat): 

、軸の3×2配列からすべての軸をループにそれを使用することができます

1つのループですべての軸に簡単にプロットすることができます。

axes.flatten()を使用することもできます。ここで、flatten()はnumpy配列のメソッドです。イテレータの代わりに、配列のフラット化されたバージョンを返します。

for i, ax in enumerate(axes.flatten()): 

2つの間の外見との違いはありません。しかし、反復子は実際には新しい配列を作成しないため、わずかに高速です(これはmatplotlib軸オブジェクトの場合には決して顕著ではありません)。

軸配列の
flat1 = [ax for ax in axes.flat] 
flat2 = axes.flatten() 
print(flat1 == flat2) 
> [ True True True True True True] 

反復処理平坦化バージョンが個別に行と列を反復処理の素朴なアプローチに比べて、あなたは一つのループを節約するという利点があり、

for row in axes: 
    for ax in row: 
     ax.scatter(...) 
関連する問題