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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

1回答

519閲覧

実験データをヒートマップのような図で表したいです。よろしくお願いします。

Junpei-O

総合スコア12

Matplotlib

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

2クリップ

投稿2018/04/17 03:24

編集2018/04/17 04:26

前提・実現したいこと

私はpython3で実験データをヒートマップのような図で表したいと思ってます。
python3は最近勉強し始めたところなので、調べながら進めてます。

他にもプログラムで問題になりそうな箇所ありましたら、指摘頂けると幸いです。

発生している問題・エラーメッセージ

上から順にプログラムを組んでいってます。
matplotlabをimportするとなぜかエラーになってしまいます。
それ以前のコードではうまくXYZ座標作れてます。

エラーメッセージ 2018-04-17 12:05:21.515 Python[44316:1775941] -[NSApplication _setup:]: unrecognized selector sent t o instance 0x7f96c28b3e70 2018-04-17 12:05:21.518 Python[44316:1775941] *** Terminating app due to uncaught exception 'NSInval idArgumentException', reason: '-[NSApplication _setup:]: unrecognized selector sent to instance 0x7f 96c28b3e70' *** First throw call stack: ( 0 CoreFoundation 0x00007fff527e732b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x00007fff79e61c76 objc_exception_throw + 48 2 CoreFoundation 0x00007fff5287fe04 -[NSObject(NSObject) doesNotRecog nizeSelector:] + 132 3 CoreFoundation 0x00007fff5275d870 ___forwarding___ + 1456 4 CoreFoundation 0x00007fff5275d238 _CF_forwarding_prep_0 + 120 5 Tk 0x00007fff5ee7d318 TkpInit + 467 6 Tk 0x00007fff5edfc252 Tk_Init + 1710 7 _tkinter.cpython-36m-darwin.so 0x000000010b358de5 Tcl_AppInit + 84 8 _tkinter.cpython-36m-darwin.so 0x000000010b35443a _tkinter_create + 1047 9 Python 0x000000010a938199 _PyCFunction_FastCallDict + 166 10 Python 0x000000010a99f9b4 call_function + 511    11 Python 0x000000010a998317 _PyEval_EvalFrameDefault + 4950 12 Python 0x000000010a9a0155 _PyEval_EvalCodeWithName + 1781 13 Python 0x000000010a9a0a6b _PyFunction_FastCallDict + 449 14 Python 0x000000010a8fecf3 _PyObject_FastCallDict + 214 15 Python 0x000000010a8fee17 _PyObject_Call_Prepend + 156 16 Python 0x000000010a8feb60 PyObject_Call + 102 17 Python 0x000000010a94bd0b slot_tp_init + 61 18 Python 0x000000010a948ab1 type_call + 184 19 Python 0x000000010a8fecb7 _PyObject_FastCallDict + 154 20 Python 0x000000010a99f97d call_function + 456 21 Python 0x000000010a998317 _PyEval_EvalFrameDefault + 4950 22 Python 0x000000010a9a0155 _PyEval_EvalCodeWithName + 1781 23 Python 0x000000010a996f47 PyEval_EvalCode + 42 24 Python 0x000000010a9c0fc4 run_mod + 54 25 Python 0x000000010a9bfeb9 PyRun_FileExFlags + 160 26 Python 0x000000010a9bf4fe PyRun_SimpleFileExFlags + 285 27 Python 0x000000010a9d3bbd Py_Main + 3505 28 Python 0x000000010a8f1e1b Python + 7707 29 libdyld.dylib 0x00007fff7aa7b015 start + 1 30 ??? 0x0000000000000002 0x0 + 2 ) libc++abi.dylib: terminating with uncaught exception of type NSException Abort trap: 6

該当のソースコード

python3
ソースコード

# coding: utf-8 import tkinter as tk import tkinter.filedialog as fd import matplotlib.pyplot as plt import numpy as np root = tk.Tk() root.withdraw() file = fd.askopenfilename( title="ファイルを選んでください。", filetypes=[("TEXT", ".txt"), ("TEXT", ".py"), ("TEXT", ".lvm")] ) arr = [[]] if file: with open(file, "r", encoding="utf_8")as fileobj: for i, line in enumerate(fileobj): line = line.strip("\n") a = line.split(" ") a = list(map(float, a)) arr.append(a) del arr[0] Z = np.array(arr) print(Z) sh = Z.shape x = np.arange(sh[0]+1) y = np.arange(sh[1]+1) print(x) print(y) X, Y = np.meshgrid(x, y) plt.pcolor(X, Y, Z) plt.colorbar plt.show()

試したこと

テキストファイルを読み込みたいが、読み込む前に終わってしまう。どうやらmatplotlabが悪さをしているように思えます。
以下テスト用のデータ

0.176242 0.158846 0.081636 0.125887 0.070649 0.085908

補足情報(FW/ツールのバージョンなど)

MacBook Airを使ってます。
ここにより詳細な情報を記載してください。

コメントより修正して実行した結果

◯tk文をコメントアウト
プログラムにファイル名を明記して行った。

エラーが出たので、test.txtを3行3列にし直して実行するとヒートマップの図が表示できた。
ただ一方で、tkをインポートしたいので、課題は残った。

# coding: utf-8 ''' import tkinter as tk ''' import tkinter.filedialog as fd import matplotlib.pyplot as plt import numpy as np ''' root = tk.Tk() root.withdraw() file = fd.askopenfilename( title="ファイルを選んでください。", filetypes=[("TEXT", ".txt"), ("TEXT", ".py"), ("TEXT", ".lvm")] ) ''' file = 'test.txt' arr = [[]] if file: with open(file, "r", encoding="utf_8")as fileobj: for i, line in enumerate(fileobj): line = line.strip("\n") a = line.split(" ") a = list(map(float, a)) arr.append(a) del arr[0] Z = np.array(arr) print(Z) sh = Z.shape x = np.arange(sh[0]+1) y = np.arange(sh[1]+1) print(x) print(y) X, Y = np.meshgrid(x, y) plt.pcolor(X, Y, Z) plt.colorbar plt.show()

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

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

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

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

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

kawakawa2018

2018/04/17 03:27

はじめまして 掲載されたソースコードですが、編集機能を使ってコードタグで囲んでください。
Junpei-O

2018/04/17 03:33

大変失礼いたしました。教えていただきありがとうございます。修正しましたので、見て頂けると幸いです。
tachikoma

2018/04/17 03:41

tkをimportしない状態でも同じエラーは出ますか?
Junpei-O

2018/04/17 04:28 編集

tkをimportしないで、行うとエラーは出ました。けれどtestファイルを正方行列にすると上手く図が表示できました。tkをimportして行いたいのですが、厳しいのでしょうか。
tachikoma

2018/04/17 04:33

tkを省いてうまくいく場合、matplotlibのバックエンドがtkに強制されたことによるエラーのような気がします。取り急ぎ関連しそうな情報のご提供までに。また時間をみてやってみます。
kawakawa2018

2018/04/17 04:36

補足です 「testファイルを正方行列にすると上手く図が表示」 ←回答にも書きました。
Junpei-O

2018/04/17 04:48

tachikomaさん ありがとうございます。エラーの原因を突き詰めるきっかけを与えてくださり感謝します。また、お力添えいただけたら幸いです。
guest

回答1

0

ベストアンサー

はじめまして
ソースの問題ですね。

エラーの原因

Python

1 x = np.arange(sh[0]+1) 2 y = np.arange(sh[1]+1)

でX、Yの値が一致しないからです。
元のデータの要素数+1 でX,Yの配列を用意していますが。。。
このあたり、matplotlabの仕様だと思うのですが、
回避方法を考えないといけないですね。


参考

ためしにダミーデータをテキストに一行追記したところ
グラフは表示されています。

0.176242 0.158846 0.081636
0.125887 0.070649 0.085908
0.125887 0.070649 0.087908 ←ダミーデータ

イメージ説明

ここでは
(Xの次元数,Yの次元数)=(3,3)

Xの次元数=Yの次元数
ですので、エラーは出ずに実行されています。

投稿2018/04/17 04:35

kawakawa2018

総合スコア1195

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

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

Junpei-O

2018/04/17 04:51

ありがとうございます。お力添えいただいたおかげでなんとかグラフの表示はできました。 tkをimportした場合に関しても分かりましたら、ご教授頂けると幸いです。
kawakawa2018

2018/04/17 04:58

あとですが 「tkをimportした場合に関しても分かりましたら」 Windows環境ではちゃんとテキスト選択画面も表示されます。 ソースコードは修正なしで(ただしtxtファイルにはダミーデータを一行付加していますが) ご報告まで
Junpei-O

2018/04/17 10:21 編集

ご連絡ありがとうございます。 windowsでは動作するのですね。 確認してみたところtkのバージョンはTcl 8.5 & Tk 8.5 (8.5.9)でした。 先ほどまで、tkのアンインストール&再インストールを試みましたが、pip3 freezeおよびwhich tkinterではパッケージが見当たらなく、実行できませんでした。 以下試しにやってみたターミナルの結果です。 ''' $python3 uninstall tkinter /usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/Resources/Python.app/Contents/MacOS/Python: can't open file 'uninstall': [Errno 2] No such file or directory '''
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問