1. ホーム
  2. macos

IPythonやJupyter Notebookで回転可能な3Dプロットを表示する

2023-09-02 23:21:09

質問

(Mac OSX 10.10.5)

matplotlibのサイトから再現できるのは mplot3d 3次元散布図のサンプルコード scatter3d_demo.py を実行しましたが、プロットは静的な画像としてレンダリングされます。グラフをクリックして動的に回転させ、3Dプロットされたデータを表示することはできません。

(a) ターミナル内の ipython、(b) ターミナル内の ipython notebook、および (c) Anaconda ランチャーから起動した ipython notebook を使用して、サンプルコードを使用して静的な 3D プロットを達成しました。

私は、想定される知識として、いくつかの非常に基本的なステップを逃していると思います。

過去の学習では、プロットする際にグラフビューアを持つGUI Python Appを開いていました。(下記のコードの解決策2はこれを開きます。) おそらく、その表示方法に出力グラフをエクスポートするコードを知る必要があるのでは?(そう、下のコードブロックのコメントにあるように、インラインやノートブックなしで最初の行として%matplotlib (only) を使ってください)。

ipython notebookでの例です。

    # These lines are comments
    # Initial setup from an online python notebook tutorial is below. 
    # Note the first line "%matplotlib inline" this is how the tutorial has it.
    # Two solutions 1. use: "%matplotlib notebook" graphs appear dynamic in the notebook.
    #               2. use: "%matplotlib" (only) graphs appear dynamic in separate window. 
    #    ( 2. is the best solution for detailed graphs/plots. )

    %matplotlib inline  
    import pandas as pd
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D

    pd.set_option('html',False)
    pd.set_option('max_columns',30)
    pd.set_option('max_rows',10)


    # What follows is a copy of the 3D plot example code.
    # Data is randomly generated so there is no external data import.

    def randrange(n, vmin, vmax):
        return (vmax-vmin)*np.random.rand(n) + vmin

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    n = 100
    for c, m, zl, zh in [('r', 'o', -60, -25), ('b', '^', -30, -5)]:
        xs = randrange(n, 23, 50)
        ys = randrange(n, 0, 100)
        zs = randrange(n, zl, zh)
        ax.scatter(xs, ys, zs, c=c, marker=m)

    ax.set_xlabel('X Label')
    ax.set_ylabel('Y Label')
    ax.set_zlabel('Z Label')

    plt.show()

どなたか、私が何を見落としているのか特定できますか?

Python 3.3.6 documentation, section 25.1perhaps the tkinter package ... を見ています。

tkinter パッケージ ("Tk interface") は、Tk GUI ツールキットへの Python 標準のインタフェースです。Tk と tkinter の両方は、Windows システムと同様に、ほとんどの Unix プラットフォームで利用可能です。

しかし、これはGUIプログラムの開発に関連しているので、これが関連するかどうかわからないと思います。 (正しくは、これはソリューションには必要ありませんでした)。

どのように解決するのですか?

使用方法 %matplotlib notebook の代わりに %matplotlib inline の代わりに、IPythonノートブックに埋め込まれたインタラクティブな図を得るために、最近のバージョンのmatplotlib (1.4+) とIPython (3.0+) を必要とします。