質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1631閲覧

MatplotのFor文でのWarnning

iwase13

総合スコア11

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/28 09:01

**For文を使ったMatplotlib.pyplotで2回目以降の描画が出来ず困っています。
**
描画対象は[3, 26, 26, 32]のarrayで、26✕26のimageです。
最初の4行8列の32枚のimageは描画されましたが、
2回目以降の32枚の描画はされずWarningが出ます。
axをリストax[j]に出来ないかと試しましたが動かず。

コードは下記。

for j in range(3): for i in range(32): plt.subplot(4,8,1+i) ax = plt.imshow(layer_output[j,:,:,i].reshape(26,26), cmap='binary')

Warningは下記。
MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
This is separate from the ipykernel package so we can avoid doing imports until

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

plt.show()でグラフを表示させていないのが原因です。解決方法は単純です。

Python

1for j in range(3): 2 for i in range(32): 3 plt.subplot(4,8,1+i) 4 ax = plt.imshow(layer_output[j,:,:,i].reshape(26,26), cmap='binary') 5 plt.show()

Warningに関しては、matplotlibはplt.show()で画像を表示しない限り(もしくはplt.clf()などでクローズしないかぎり)、Figureがクローズせず残ってしまうため、そこに重なる形で描写するような形になって、Warningがでています。
ちなみに、2回目以降が描出されていないと思われているようですが、表示されているのは最後に描出されたFigureです。一番最後に作成したFigureだけは、plt.show()せずとも自動で表示してくれるからです。

投稿2020/10/28 11:04

Ryomax

総合スコア68

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iwase13

2020/10/28 13:18

解決しました! 有難うございます。 %matplotlib inline を事前に宣言すれば、plt.show()は要らないと勘違いしました。
guest

0

for j in range(3): for i in range(32): plt.subplot(4,8,1+i)

そもそもplt.subplot()を何回も呼び出しているのが間違いです。
最初に一度だけ呼び出し、作画域(サブプロット)を変数(ax)で受け取って
その変数を指定して作画してください。

fig, ax = plt.subplots(4, 8) for row in range(4): for col in range(8): ax[row, col].text(0.04, 0.45, f"ax[{row},{col}]")

イメージ説明

投稿2020/10/28 12:24

technocore

総合スコア7337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iwase13

2020/10/28 13:17 編集

有難うございます。
technocore

2020/10/28 22:24

ワーニングを消したいとの質問ですが、消えましたか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問