Blenderで4次元データの可視化


やること

4次元データのグラフをBlenderで作成してみましょう。
4軸目は、球のサイズにします。

やってみる

データはダミーで作ります。

import bpy
import numpy as np


def draw(data, scale=0.02):
    mn = data.min()
    mx = data.max()
    data[:, :3] = (data[:, :3] - mn) / (mx - mn) * 2
    for x, y, z, s in data:
        bpy.ops.mesh.primitive_ico_sphere_add(subdivisions=3, radius=s * scale, location=(x, y, z))
    bpy.ops.object.select_all(action='SELECT')
    bpy.ops.object.shade_smooth()
    bpy.ops.mesh.primitive_cylinder_add(vertices=4, radius=0.02, location=(1, 0, 0), rotation=(0, 1.5708, 0))
    bpy.ops.mesh.primitive_cylinder_add(vertices=4, radius=0.02, location=(0, 1, 0), rotation=(1.5708, 0, 0))
    bpy.ops.mesh.primitive_cylinder_add(vertices=4, radius=0.02, location=(0, 0, 1))
    bpy.ops.object.select_all(action='DESELECT')

# 今回は乱数で生成するが、np.loadtxtでCSVから読んでもよい
data = np.random.default_rng(0).uniform(0, 100, (20, 4))
data[:, 3] = data[:, 3] // 10 + 1

draw(data)

実行結果

以上