📊

Streamlitを使って3D散布図を簡単に表示する

2023/07/06に公開

はじめに

Streamlitによる3D散布図表示方法に関して記載しようと思います。
と言いましても、以下の例のplotlyで作成した3D散布図をStreamlitで単純に表示したのみになります。
https://plotly.com/python/3d-scatter-plots/

Streamlitのインストールに関しては以下を参照して下さい。
https://docs.streamlit.io/library/get-started/installation

実装

コードは次のようになります。

import streamlit as st
import plotly.express as px

# データロード
df = px.data.iris()
print(df)

# 3D散布図としてデータ準備
fig = px.scatter_3d(
    df,
    x="sepal_length",
    y="sepal_width",
    z="petal_width",
    color="species",
)
# グラフレイアウト設定
fig.update_layout(title="3D Point Cloud", width=500, height=500)
# マーカーサイズ設定
fig.update_traces(marker_size=2)
# グラフ表示
st.plotly_chart(fig, use_container_width=True)
  1. Iris(あやめという花の形状データ)データを取得します。
df = px.data.iris()

こちらの中身は以下のようになっています。

Irisデータセット(「あやめ」という花の形状データ)は、「花びら(petal)/がく片(sepal)の長さと幅(cm)」という4つの特徴量と、あやめの種類である「setosa/versicolor/virginica」という3つのラベルで構成される表形式データセット(=構造化データセット)である。(参考文献1より)

     sepal_length  sepal_width  petal_length  petal_width    species  species_id
0             5.1          3.5           1.4          0.2     setosa           1
1             4.9          3.0           1.4          0.2     setosa           1
2             4.7          3.2           1.3          0.2     setosa           1
3             4.6          3.1           1.5          0.2     setosa           1
4             5.0          3.6           1.4          0.2     setosa           1
..            ...          ...           ...          ...        ...         ...
145           6.7          3.0           5.2          2.3  virginica           3
146           6.3          2.5           5.0          1.9  virginica           3
147           6.5          3.0           5.2          2.0  virginica           3
148           6.2          3.4           5.4          2.3  virginica           3
149           5.9          3.0           5.1          1.8  virginica           3

[150 rows x 6 columns]
  1. 以下のようにがく片の長さをx、花びらの幅をy、がく片の幅をz、ラベルを色として設定します。
fig = px.scatter_3d(
    df,
    x="sepal_length",
    y="sepal_width",
    z="petal_width",
    color="species",
)
  1. グラフのレイアウト設定を行い、Streamlitによる表示を行います。
# グラフレイアウト設定
fig.update_layout(title="3D Point Cloud", width=500, height=500)
# マーカーサイズ設定
fig.update_traces(marker_size=2)
# グラフ表示
st.plotly_chart(fig, use_container_width=True)

実行

上のコードをコピペしてsample.pyファイルを作成して下さい。
その後、そちらのファイルが保存されているフォルダまで移動して、以下のコマンドで実行できるはずです。

streamlit run sample.py

実行後は以下のURLから画面が確認できるかと思います。
http://localhost:8501/

結果

参考文献

  1. plotlyの3D散布図
  2. Irisデータに関して

Discussion