PycharmでmatplotlibでNSInvalidArgumentExceptionの対処法
Pycharmでmatplotlibを使った時にNSInvalidArgumentExceptionが出てしまった時の対処法について書いていきます。
PycharmでmatplotlibでNSInvalidArgumentExceptionの対処法
Pycharmでmatplotlibを使った時に次のエラーメッセージが出てしまいました。
エラーが出た時のソースコードは後半でご紹介いたします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
2019-05-28 20:49:07.839 python[9116:217126] -[NSApplication _setup:]: unrecognized selector sent to instance 0x7f99bafb3cd0 2019-05-28 20:49:07.848 python[9116:217126] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSApplication _setup:]: unrecognized selector sent to instance 0x7f99bafb3cd0' *** First throw call stack: ( 0 CoreFoundation 0x00007fff4cfcfcfd __exceptionPreprocess + 256 1 libobjc.A.dylib 0x00007fff77675a17 objc_exception_throw + 48 2 CoreFoundation 0x00007fff4d049b06 -[NSObject(NSObject) __retain_OA] + 0 3 CoreFoundation 0x00007fff4cf71b8f ___forwarding___ + 1485 4 CoreFoundation 0x00007fff4cf71538 _CF_forwarding_prep_0 + 120 5 libtk8.6.dylib 0x0000000112fdf31d TkpInit + 413 6 libtk8.6.dylib 0x0000000112f3717e Initialize + 2622 7 _tkinter.cpython-37m-darwin.so 0x0000000112d5fa0f _tkinter_create + 1183 8 python 0x0000000100786116 _PyMethodDef_RawFastCallKeywords + 230 9 python 0x00000001008c2e42 call_function + 306 10 python 0x00000001008c0aec _PyEval_EvalFrameDefault + 46092 11 python 0x00000001008b449e _PyEval_EvalCodeWithName + 414 12 python 0x0000000100784de7 _PyFunction_FastCallDict + 231 13 python 0x0000000100807381 slot_tp_init + 193 14 python 0x0000000100811361 type_call + 241 15 python 0x0000000100785ae3 _PyObject_FastCallKeywords + 179 16 python 0x00000001008c2ed5 call_function + 453 17 python 0x00000001008c0be0 _PyEval_EvalFrameDefault + 46336 18 python 0x00000001007858d5 function_code_fastcall + 117 19 python 0x00000001008c2dc7 call_function + 183 20 python 0x00000001008c0aec _PyEval_EvalFrameDefault + 46092 21 python 0x00000001008b449e _PyEval_EvalCodeWithName + 414 22 python 0x0000000100784de7 _PyFunction_FastCallDict + 231 23 python 0x0000000100788ce2 method_call + 130 24 python 0x0000000100786752 PyObject_Call + 130 25 python 0x00000001008c0d58 _PyEval_EvalFrameDefault + 46712 26 python 0x00000001008b449e _PyEval_EvalCodeWithName + 414 27 python 0x0000000100785fe3 _PyFunction_FastCallKeywords + 195 28 python 0x00000001008c2dc7 call_function + 183 29 python 0x00000001008c0b27 _PyEval_EvalFrameDefault + 46151 30 python 0x00000001007858d5 function_code_fastcall + 117 31 python 0x00000001008c2dc7 call_function + 183 32 python 0x00000001008c0b27 _PyEval_EvalFrameDefault + 46151 33 python 0x00000001008b449e _PyEval_EvalCodeWithName + 414 34 python 0x0000000100785fe3 _PyFunction_FastCallKeywords + 195 35 python 0x00000001008c2dc7 call_function + 183 36 python 0x00000001008c0b27 _PyEval_EvalFrameDefault + 46151 37 python 0x00000001008b449e _PyEval_EvalCodeWithName + 414 38 python 0x0000000100785fe3 _PyFunction_FastCallKeywords + 195 39 python 0x00000001008c2dc7 call_function + 183 40 python 0x00000001008c0aec _PyEval_EvalFrameDefault + 46092 41 python 0x00000001008b449e _PyEval_EvalCodeWithName + 414 42 python 0x00000001009179a0 PyRun_FileExFlags + 256 43 python 0x0000000100916e17 PyRun_SimpleFileExFlags + 391 44 python 0x0000000100944d3f pymain_main + 9663 45 python 0x000000010075866d main + 125 46 libdyld.dylib 0x00007fff78e433d5 start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException |
なにやら「NSInvalidArgumentException」が原因で実行できない様子。
ネットで調べたところ、matplotlibのimportの前に次の2行を挿入すればいけるらしいです。
1 2 3 4 5 |
# ここから挿入 import matplotlib matplotlib.use('TkAgg') # ここまで挿入(import matplotlib.pyplot as plt)は残す import matplotlib.pyplot as plt |
import matplotlib
matplotlib.use('TkAgg’)
の2行を追加して実行してみてください。
おそらくNSInvalidArgumentExceptionが解消されるはずです。
なぜNSInvalidArgumentExceptionが解消されるの?
私はぶっちゃけそこまで詳しくないのでネットで調べました。
ネットで調べた結論を以下にまとめます。
matplotlibを使用することで作成した図をファイルやGUIウィンドウに出力します。
matplotlibの画像描画バックエンドではデフォルトの設定ではCocoaのAPIを使ってレンダリングを行う「macosx」
です。
matplotlibのデフォルトである「macosx」以外には「GTKAgg」や「Qt4Agg」があります。
何らかの理由で(この理由が調べても分かりませんでした。私の環境だけかもしれません)Pycharm上ではCocoaのAPIを使ってレンダリングを行う「macosx」を使っての描画ができないようです。
そこで先ほどご紹介した
import matplotlib
matplotlib.use('TkAgg’)
の2行で明示的にデフォルトの設定を「GTKAgg」に変える必要があるようです。
メインの処理上で明示的にデフォルトの設定を変える方法だけでなく、設定ファイルを変える方法もあります。
終わりに
今回はPycharmでmatplotlibを使った時にNSInvalidArgumentExceptionが出てしまった時の対処法について書きました。
NSInvalidArgumentExceptionの他にRuntimeErrorになる場合もあるそうですね。
ちなみに私がPycharmでmatplotlibでいろいろいじくった際のソースコードはこちらにあります。
https://github.com/Chico27/Python-graph-plot
記事の一番上にご紹介したエラーメッセージは、わざとエラーメッセージを出すために「import matplotlib」と「matplotlib.use('TkAgg’)」の2行をコメントアウトして実行した結果です。
この記事が参考になれば幸いです。
ディスカッション
コメント一覧
まだ、コメントがありません