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

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

ただいまの
回答率

90.34%

  • Python 3.x

    7364questions

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

  • MacOS(OSX)

    2032questions

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

  • Atom (テキストエディタ)

    552questions

  • Matplotlib

    372questions

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

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

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 317

Junpei-O

score 1

 前提・実現したいこと

私は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()
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tachikoma

    2018/04/17 13:33

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

    キャンセル

  • kawakawa2018

    2018/04/17 13:36

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

    キャンセル

  • Junpei-O

    2018/04/17 13:48

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

    キャンセル

回答 1

+3

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

 エラーの原因

 x = np.arange(sh[0]+1)
 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 13:51

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

    キャンセル

  • 2018/04/17 13:58

    あとですが

    「tkをimportした場合に関しても分かりましたら」

    Windows環境ではちゃんとテキスト選択画面も表示されます。
    ソースコードは修正なしで(ただしtxtファイルにはダミーデータを一行付加していますが)
    ご報告まで

    キャンセル

  • 2018/04/17 14:18

    macに固有の問題のようですね。
    たぶんtkの再インストールですね(最新版?へ)。

    「tkをimportした場合に関して」
    こちら
    https://stackoverflow.com/questions/30031063/nsexception-with-tkinter-on-mac

    キャンセル

  • 2018/04/17 19:16 編集

    ご連絡ありがとうございます。
    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
    '''

    キャンセル

同じタグがついた質問を見る

  • Python 3.x

    7364questions

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

  • MacOS(OSX)

    2032questions

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

  • Atom (テキストエディタ)

    552questions

  • Matplotlib

    372questions

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