SciPy + matplotlib로 3D 산점도 작성 (Python)

Python에서 SciPy (NumPy)와 matplotlib을 사용하여 3D 산점도를 만드는 방법입니다.
샘플 데이터는 iris.csv 사용 ( h tp ///아마. cs. 베르케 y. 에즈/다타/이리 s. CSV )
  • scipy.genformtxt 메서드를 사용하면 csv 파일의 데이터를 scipy.array 형식으로 직접 가져올 수 있습니다.
  • scipy.array 형식의 데이터는 일반 배열로 취급할 수 있으며, d[d[:,0] >= 7]와 같이 조건에 맞는 레코드를 쉽게 추출할 수 있습니다. 여러 조건식을 사용하는 경우 비트 연산자로 연결합니다.
  • 그래프 묘화시에는 scatter3D 메소드를 사용할 수 있습니다만, 데이터수가 많으면 극단적으로 무겁게 됩니다. plot 메소드가 더 좋습니다.
    (5/9 추기)plot 메소드에서는 데이터의 읽어들여 순서에 플롯이 덧쓰기되어 가므로, 플롯이 겹쳤을 때에 입체적인 전후 관계가 이상해집니다. scatter 메소드는 처리가 무겁고, 그래프의 회전 조작에 어려움이 있습니다만, 입체적인 전후 관계는 보다 정확합니다.
    (5/10추기) 입체적인 겹침이 이상한 것은 scatter도 마찬가지였습니다. 아무래도 matplotlib의 미해결 문제 인 것 같습니다. 깨끗한 3D 그래프 쓰고 싶은 사람은 MayaVi를 사용할 수 있다는 것.
    ht tp // // tp t t b. rg / mpl_와 t / mp t3d / fuq. HTML
  • plot 메소드의 프로퍼티로서, color (마커의 색), ms (Marker Size, 마커의 크기), mew (Marker Edge Width, 마커의 테두리의 두께) 등을 지정할 수 있습니다.

  • plot3d.py
    # coding: UTF-8
    
    from matplotlib import pyplot
    from mpl_toolkits.mplot3d import Axes3D
    from scipy import genfromtxt
    
    
    # ファイル読み込み
    d = genfromtxt("./temp/iris.csv", delimiter=",")
    
    # グラフ作成
    fig = pyplot.figure()
    ax = Axes3D(fig)
    
    # 軸ラベルの設定
    ax.set_xlabel("X-axis")
    ax.set_ylabel("Y-axis")
    ax.set_zlabel("Z-axis")
    
    # 表示範囲の設定
    ax.set_xlim(4, 8)
    ax.set_ylim(2, 5)
    ax.set_zlim(1, 8)
    
    # 抽出条件設定
    d1 = d[d[:,0] >= 7]
    d2 = d[(d[:,0] < 7) & ((d[:,1] > 3) & (d[:,1] <= 3.5))]
    d3 = d[(d[:,0] < 7) & ((d[:,1] <= 3) | (d[:,1] > 3.5))]
    
    
    # グラフ描画
    ax.plot(d1[:,0], d1[:,1], d1[:,2], "o", color="#cccccc", ms=4, mew=0.5)
    ax.plot(d2[:,0], d2[:,1], d2[:,2], "o", color="#00cccc", ms=4, mew=0.5)
    ax.plot(d3[:,0], d3[:,1], d3[:,2], "o", color="#ff0000", ms=4, mew=0.5)
    pyplot.show()
    

    출력 결과



    다른 창이 열리고 그래프가 표시됩니다.
    그래프는 드래그로 자유롭게 회전할 수 있습니다.
    메뉴바의 save 아이콘으로 아래와 같은 PNG 파일을 출력할 수 있습니다.

    좋은 웹페이지 즐겨찾기