[解決済み】TypeError: imshow()で配列をプロットすると、画像データの寸法が不正になる
2022-02-16 12:42:24
質問
以下のコードについて
# Numerical operation
SN_map_final = (new_SN_map - mean_SN) / sigma_SN
# Plot figure
fig12 = plt.figure(12)
fig_SN_final = plt.imshow(SN_map_final, interpolation='nearest')
plt.colorbar()
fig12 = plt.savefig(outname12)
と
new_SN_map
は1次元配列であり
mean_SN
と
sigma_SN
が定数である場合、以下のエラーが発生します。
Traceback (most recent call last):
File "c:\Users\Valentin\Desktop\Stage M2\density_map_simple.py", line 546, in <module>
fig_SN_final = plt.imshow(SN_map_final, interpolation='nearest')
File "c:\users\valentin\appdata\local\enthought\canopy\user\lib\site-packages\matplotlib\pyplot.py", line 3022, in imshow
**kwargs)
File "c:\users\valentin\appdata\local\enthought\canopy\user\lib\site-packages\matplotlib\__init__.py", line 1812, in inner
return func(ax, *args, **kwargs)
File "c:\users\valentin\appdata\local\enthought\canopy\user\lib\site-packages\matplotlib\axes\_axes.py", line 4947, in imshow
im.set_data(X)
File "c:\users\valentin\appdata\local\enthought\canopy\user\lib\site-packages\matplotlib\image.py", line 453, in set_data
raise TypeError("Invalid dimensions for image data")
TypeError: Invalid dimensions for image data
このエラーの原因は何でしょうか?数値演算は許可されていると思ったのですが。
どのように解決するのですか?
StackOverflowに(多少)関連する質問があります。
ここで問題となったのは、形状が (nx,ny,1) の配列は、やはり3次元配列とみなされ、以下のようにしなければならないことです。
squeeze
dまたは2D配列にスライスしてください。
より一般的には、Exceptionが発生する理由
TypeError: 画像データの寸法が無効です
はここに表示されます。
matplotlib.pyplot.imshow()
2次元配列、または3次元が3か4の形状を持つ3次元配列が必要です!
で簡単に確認することができます(これらの確認は
imshow
この関数は、入力が有効でない場合に、より具体的なメッセージを与えることだけを目的としています)。
from __future__ import print_function
import numpy as np
def valid_imshow_data(data):
data = np.asarray(data)
if data.ndim == 2:
return True
elif data.ndim == 3:
if 3 <= data.shape[2] <= 4:
return True
else:
print('The "data" has 3 dimensions but the last dimension '
'must have a length of 3 (RGB) or 4 (RGBA), not "{}".'
''.format(data.shape[2]))
return False
else:
print('To visualize an image the data must be 2 dimensional or '
'3 dimensional, not "{}".'
''.format(data.ndim))
return False
あなたの場合
>>> new_SN_map = np.array([1,2,3])
>>> valid_imshow_data(new_SN_map)
To visualize an image the data must be 2 dimensional or 3 dimensional, not "1".
False
は
np.asarray
が内部で行っていることです。
matplotlib.pyplot.imshow
ということで、一般的にはそうするのがベストです。もしnumpyの配列があれば、それは時代遅れですが、そうでなければ(たとえば
list
が必要です。
あなたの場合、1次元の配列なので
np.expand_dims()
import matplotlib.pyplot as plt
a = np.array([1,2,3,4,5])
a = np.expand_dims(a, axis=0) # or axis=1
plt.imshow(a)
plt.show()
のような1次元配列を受け付けるものを使うか、あるいは
plot
:
a = np.array([1,2,3,4,5])
plt.plot(a)
plt.show()
関連
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
python string splicing.join()とsplitting.split()の説明
-
python implement mysql add delete check change サンプルコード
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
Python入門 openを使ったファイルの読み書きの方法
-
Pythonショートビデオクローラーチュートリアル
-
Python LeNetネットワークの説明とpytorchでの実装
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。