私はこのコードのように、axes.flat機能を使用していますmatplotlibのを使用して様々なプログラムを見てきました:matplotlibのaxes.flatは何をしますか?
for i, ax in enumerate(axes.flat):
これは何をするのでしょうか?
私はこのコードのように、axes.flat機能を使用していますmatplotlibのを使用して様々なプログラムを見てきました:matplotlibのaxes.flatは何をしますか?
for i, ax in enumerate(axes.flat):
これは何をするのでしょうか?
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.ndarray
:numpy.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(...)