[解決済み] plt.subplots() の Axes は "numpy.ndarray" オブジェクトで、"plot" という属性を持っていない。
質問
<ブロッククオートエラーメッセージを理解しようとすると、以下の情報は余計なものになるかもしれません。まずは 答え によって ユーザー707650 .
MatPlotLib を使って、私のデータから以下のようなものを作成する、一般化できるスクリプトが欲しかったのです。
ウィンドウには a があるように配置されたサブプロット。 b 列ごとのサブプロット。の値を変更できるようにしたい。 a と b .
のデータがある場合、そのデータは 2a サブプロットでは、2つのウィンドウが必要で、それぞれに先に説明した " a に従って配置されたサブプロット。 b 列ごとのサブプロット"。
私がプロットしているxとyのデータはnp.arrayに格納されたfloatで、以下のような構造になっています。
-
xデータはすべてのプロットで常に同じで、長さは5である。
'x_vector': [0.000, 0.005, 0.010, 0.020, 0.030, 0.040]
-
すべてのプロットの y データは y_vector ここで、最初のプロットのデータは、0から5のインデックスに格納されています。2番目のプロットのデータは、6から11のインデックスに格納されます。3番目のプロットには12-18、4番目のプロットには19-24、といった具合です。
このデータセットでは、合計で91個のプロットがあります(つまり、91*6 = 546個の値がy_vectorに格納されています)。
試行する。
import matplotlib.pyplot as plt
# Options:
plots_tot = 14 # Total number of plots. In reality there is going to be 7*13 = 91 plots.
location_of_ydata = 6 # The values for the n:th plot can be found in the y_vector at index 'n*6' through 'n*6 + 6'.
plots_window = 7 # Total number of plots per window.
rows = 2 # Number of rows, i.e. number of subplots per column.
# Calculating number of columns:
prim_cols = plots_window / rows
extra_cols = 0
if plots_window % rows > 0:
extra_cols = 1
cols = prim_cols + extra_cols
print 'cols:', cols
print 'rows:', rows
# Plotting:
n=0
x=0
fig, ax = plt.subplots(rows, cols)
while x <= plots_tot:
ax[x].plot(x_vector, y_vector[n:(n+location_of_ydata)], 'ro')
if x % plots_window == plots_window - 1:
plt.show() # New window for every 7 plots.
n = n+location_of_ydata
x = x+1
以下のエラーが発生します。
cols: 4
rows: 2
Traceback (most recent call last):
File "Script.py", line 222, in <module>
ax[x].plot(x_vector, y_vector[n:(n+location_of_ydata)], 'ro')
AttributeError: 'numpy.ndarray' object has no attribute 'plot'
解決方法は?
を表示させるだけでデバッグを行う場合
ax
ということがすぐにわかります。
ax
は2次元の配列で、1次元が行、1次元が列となります。
したがって
ax
を取得し、実際の
AxesSubplot
のように、インスタンスを作成します。
ax[1,1].plot(...)
サブプロットを反復処理する場合、現在のように
ax
を最初に表示します。
ax = ax.flatten()
そして今
ax
は1次元の配列です。行と列のどちらが先にステップスルーされるのか分かりませんが、回り込みがおかしい場合は転置を使います。
ax = ax.T.flatten()
もちろん、もうすでにインデックスがあり、他の2つの数値は固定されているので、各サブプロットをその場で作成する方が理にかなっています。
for x < plots_tot:
ax = plt.subplot(nrows, ncols, x+1)
注意:あなたは
x <= plots_tot
とはいえ
x
を0から始めると
IndexError
は、現在のコードで(配列を平坦化した後)次に進みます。Matplotlib は (残念ながら) サブプロットに対して 1-indexed です。私は 0 インデックスの変数(Python スタイル)を使うのが好きで、単に
+1
をサブプロットインデックスとして使用します(上記のように)。
関連
-
python call matlab メソッドの詳細
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み] オブジェクト名の前のシングルアンダーコアとダブルアンダーコアの意味は何ですか?
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み] XMLを解析して、特定のノード属性のインスタンスをカウントするには?
-
[解決済み] エラーです。" 'dict' オブジェクトには 'iteritems' という属性がありません "
-
[解決済み】Matplotlibで図のタイトルと軸ラベルのフォントサイズを設定するには?
-
[解決済み] matplotlibで多くのサブプロットに対して単一の凡例を作るにはどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonはWordの読み書きの変更操作を実装している
-
Python jiabaライブラリの使用方法について説明
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
PythonによるExcelファイルの一括操作の説明
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない