今回はStreamlitでサイドバーを使う方法を紹介します。
Streamlitは基本的には1カラムで、上から順に要素が追加されていくのですが、st.sidebar という属性を使うことでサイドバーを表示しその中に要素を追加していくことができます。
ドキュメントはこちら: st.sidebar – Streamlit Docs
使い方は簡単で、通常、 st.{要素名} とするところを、 st.sidebar.{要素名} とするか、
with st.sidebar: のブロック内で st.{要素名} と宣言することで要素の配置場所をサイドバーにできます。何か一つでもサイドバーに配置されたらそれまで表示されていなかったサイドバーを表示できます。
普通に要素を配置するだけれあれば、要素の配置場所が変わるだけという挙動になります。
例えばこのような例になるでしょうか。
import streamlit as st
st.sidebar.title("サイドバーの基本例")
# テキスト入力
name = st.sidebar.text_input("名前を入力してください")
# スライダー
age = st.sidebar.slider("年齢を選択してください", 0, 100, 25)
# セレクトボックス
favorite_color = st.sidebar.selectbox("好きな色を選んでください", ["赤", "青", "緑"])
# メイン画面に表示
st.write(f"こんにちは、{name}さん!")
st.write(f"年齢: {age}歳")
st.write(f"選んだ色: {favorite_color}")
sidebar を使わなかったらスライダーやドロップバーが一番上にあってその後結果が表示されるという子度ですが、sidebarを使うと操作部分はサイドバー、結果表示画カラムと分けて表示できます。
サイドバーのデフォルトの幅等を指定できないのは難点ですが、マウスでスライドさせて調整したり隠したりできるのもいいですね。
もう少し実践的な例として、サイドバーを使ってページ切り替え(のように見える) UIを実装して見ましょう。
これはサイドバーにラジオボタンなどの択一の選択肢を提示しておいて、その結果によってメンカラムに表示する項目を丸ごと切り替えてしまうというものです。
これを使うと、複数ページを持ったアプリを作ることができます。
例えばこのような感じです。
import streamlit as st
# サイドバーの操作要素
st.sidebar.title("操作要素")
page = st.sidebar.radio("ページを選択してください", ["ホーム", "データ可視化", "設定"])
# メインカラムの内容を動的に変更
if page == "ホーム":
st.title("ホームページ")
st.write("ここはホームページです。最新情報やお知らせを表示します。")
elif page == "データ可視化":
st.title("データ可視化ページ")
st.write("ここではデータの可視化を行います。")
# サンプルデータのプロット
import numpy as np
import pandas as pd
data = np.random.randn(100, 3)
df = pd.DataFrame(data, columns=["A", "B", "C"])
st.line_chart(df)
elif page == "設定":
st.title("設定ページ")
st.write("ここではアプリケーションの設定を行います。")
# 設定の入力フォーム
st.sidebar.header("設定オプション")
option1 = st.sidebar.checkbox("オプション1")
option2 = st.sidebar.checkbox("オプション2")
st.write(f"オプション1: {option1}")
st.write(f"オプション2: {option2}")
この機能を使うと、かなり本格的なアプリっぽいものが作れるようになるので、ぜひ試して見てください。