【Pythonライブラリ】「plotly」のサンプルコード

Python

こちらは「plotly」(Pythonライブラリ)のサンプルコードについての記事となっております。

その他、3Dモデルの処理方法についての情報は下記の記事で紹介しております。
open3d/plotly/trimesh/pyvista/vedo/pytorch3d/matplotlibといったPythonライブラリや3DツールのPythonAPIであるbpy(Blender)/unreal(Unreal Engine)といったPythonライブラリについて気になる方はこちらの記事をご覧ください。

基本情報 … Basic Information

Plotlyは、データ可視化のためのオープンソースのPythonライブラリです。Plotlyを使用すると、インタラクティブなプロット、グラフ、ダッシュボードを簡単に作成できます。

Plotlyは、MatplotlibやSeabornなどのPythonの他のデータ可視化ライブラリと比較して、優れたインタラクティブ性を持っています。Plotlyを使用すると、グラフやチャートにマウスをホバーしたり、スクロールやズームをしたり、グラフの一部分をクリックしてそれに関する情報を表示することができます。

サンプルコード … Sample Code

001 メッシュモデルの読み込み(形式:obj)、メッシュモデルの表示 … Read the Mesh Model, Show the Mesh Model

import plotly.graph_objs as go
import numpy as np

# OBJファイルから頂点と面を読み込む関数
def read_obj_file(file_path):
    vertices = []
    faces = []
    with open(file_path, "r") as f:
        for line in f:
            if line.startswith("v "):
                vertex = [float(v) for v in line.split()[1:4]]
                vertices.append(vertex)
            elif line.startswith("f "):
                face = [int(i.split("/")[0]) - 1 for i in line.split()[1:4]]
                faces.append(face)
    return np.array(vertices), np.array(faces)

# メッシュモデルの読み込む
vertices, faces = read_obj_file("SAMPLE/monkeyTri.obj")

# 四角形の面を三角形の面に変換する
triangles = []
for face in faces:
    if len(face) == 4:
        for i in range(2):
            triangles.append([face[i], face[i+1], face[i+2]])
    elif len(face) == 3:
        triangles.append([face[0], face[1], face[2]])
triangles = np.array(triangles)

# メッシュモデルを作成する
fig = go.Figure(data=[go.Mesh3d(x=vertices[:,0], y=vertices[:,1], z=vertices[:,2], 
                                i=triangles[:,0], j=triangles[:,1], k=triangles[:,2],
                                )])

# メッシュモデルを表示する
fig.show()

メッシュモデルの表示

001 メッシュモデルの読み込み(形式:ply)、メッシュモデルの表示 … Read the Mesh Model, Show the Mesh Model

import plotly.graph_objs as go
import numpy as np

# PLYファイルから頂点と面を読み込む関数
def read_ply_file(file_path):
    points = []
    triangles = []
    with open(file_path, "r") as f:
        lines = f.readlines()
    for i, line in enumerate(lines):
        if "end_header" in line:
            for j in range(i+1, len(lines)):
                l = lines[j].strip().split()
                if len(l) == 3 or len(l) == 6:
                    points.append([float(l[0]), float(l[1]), float(l[2])])
                elif len(l) == 4:
                    triangles.append([int(l[1]), int(l[2]), int(l[3])])
    return np.array(points), np.array(triangles)

# メッシュモデルの読み込む
points, triangles = read_ply_file("SAMPLE/monkeyTriCopy.ply")

# メッシュモデルを作成する
fig = go.Figure(data=[go.Mesh3d(x=points[:, 0], y=points[:, 1], z=points[:, 2],
                                i=triangles[:,0], j=triangles[:,1], k=triangles[:,2],
                                )])

# メッシュモデルを表示する
fig.show()

ETC

1.「plotly」(Pythonライブラリ)で3Dモデルを表示する

### Public Library ############################################################

import plotly.graph_objects as go
import numpy as np

###############################################################################

fig = go.Figure(data=[
    go.Mesh3d(
        x=[0, 0, 1, 1, 0, 0, 1, 1],
        y=[0, 1, 1, 0, 0, 1, 1, 0],
        z=[0, 0, 0, 0, 1, 1, 1, 1],
        i = [7, 0, 0, 0, 4, 4, 6, 6, 4, 0, 3, 2],
        j = [3, 4, 1, 2, 5, 6, 5, 2, 0, 1, 6, 3],
        k = [0, 7, 2, 3, 6, 7, 1, 1, 5, 5, 7, 6],
    )
])

fig.show()

###############################################################################

上記のPythonプログラムは、Plotlyライブラリを使用して、3Dメッシュを作成する方法を示しています。

このプログラムでは、Mesh3dという関数を使用して、8つの頂点を持つ立方体を作成しています。xy、およびz配列は、各頂点の座標を定義します。ij、およびk配列は、それぞれ三角形の頂点インデックスを定義しています。これらのインデックスは、頂点配列のインデックスを参照し、三角形を形成するために使用されます。

サンプル出力画像1