plotly_3d

```python
import streamlit as st
import pandas as pd
from pathlib import Path

import plotly.graph_objects as go
import plotly.express as px



def main():

    st.header('Powerd by Plotly')

    # データ取得処理
    df1 = pd.read_excel('positions.xlsx')


    # 3D散布図を作成
    fig = px.scatter_3d(df1,
                        x='X', y='Y', z='Z',
                        title='3D Point Cloud',
                        color='category'
                        )
    
    fig2 = px.scatter_3d(df1, x='X', y='Y', z='Z', 
                         color='mass', 
                         symbol='category', 
                         size='mass',
                         color_continuous_scale=['grey', 'red'], 
                         labels={'mass': 'Mass'})

    # シンボルを全てのデータポイントに円に設定
    fig2.update_traces(marker=dict(symbol='circle'))

    # カラーバーの設定
    fig2.update_layout(coloraxis_colorbar=dict(title='Mass'))

    fig2.update_layout(legend_orientation="h")

    # マーカーサイズ設定
    fig.update_traces(marker_size=5)

    # 3Dサーフェスを追加
    fig.add_trace(go.Mesh3d(x=[0, 10, 0, 10],
                            y=[0, 0, 10, 10],
                            z=[0, 0, 0, 0],
                            opacity=0.5,
                            color='rgba(0, 0, 255, 0.8)'  # RGB値を変更して色を濃くする
    ))


    # レイアウトの調整
    fig.update_layout(
        scene=dict(
            xaxis=dict(range=[-100, 100]),
            yaxis=dict(range=[-100, 100]),
            zaxis=dict(range=[-100, 100])
        ),
        width=1000, # グラフの幅と高さの設定
        height=1000,
        hoverlabel_font_size=20
    )



    # グラフの表示
    st.plotly_chart(fig2, use_container_width=True)
    st.divider()
    st.dataframe(df1.head())


if __name__ == '__main__':
    main()

```


```python

import streamlit as st
import pandas as pd
from pathlib import Path

import plotly.graph_objects as go
import plotly.express as px



def main():

    st.header('Powerd by Plotly')

    # データ取得処理(stの変数に応じてデータ取得後にフィルタリングする)
    df1 = pd.read_excel('positions.xlsx')

    # 選択した条件でフィルター
    selected_group_list = st.multiselect('左の条件でフィルターします',options=['GroupA', 'GroupB'], default=['GroupA'])

    # 3D散布図を作成 
    fig2 = px.scatter_3d(df1, x='X', y='Y', z='Z', 
                         color='mass', 
                         symbol='category', 
                         size='mass',
                         color_continuous_scale=['grey', 'red'], 
                         labels={'mass': 'Mass'})

    # シンボルを全てのデータポイントに円に設定
    fig2.update_traces(marker=dict(symbol='circle'))

    # カラーバーの設定
    fig2.update_layout(coloraxis_colorbar=dict(title='Mass'))

    fig2.update_layout(legend_orientation="h")

    # マーカーサイズ設定
    # fig.update_traces(marker_size=5)

    # 3Dサーフェスを追加
    fig2.add_trace(go.Mesh3d(x=[0, 50, 0, 50],
                            y=[0, 0, 50, 50],
                            z=[0, 0, 0, 0],
                            opacity=0.5,
                            color='rgba(0, 0, 255, 0.8)'  # RGB値を変更して色を濃くする
    ))

    # レイアウトの調整
    fig2.update_layout(
        scene=dict(
            xaxis=dict(range=[-100, 100]),
            yaxis=dict(range=[-100, 100]),
            zaxis=dict(range=[-100, 100])
        ),
        width=1000, # グラフの幅と高さの設定
        height=1000,
        hoverlabel_font_size=20
    )



    # グラフの表示
    st.plotly_chart(fig2, use_container_width=True)
    st.divider()
    st.dataframe(df1.head())


if __name__ == '__main__':
    main()

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2281347/2ce676ce-6259-c72c-5971-64efaaafe54e.png)



```python

puts 'code block.'

```