サイトアイコン アマチュア無線局JS2IIU

【Streamlit】人気のStreamlit Components紹介:streamlit-echarts

こんにちは、JS2IIUです。
Streamlitではさまざまなグラフを表示するためのUI要素が準備されています。標準のUIでは物足りない場合にはインタラクティブなグラフが描画できるstreamlit-echartを試してみるのはどうでしょうか。今回もよろしくお願いします。

1. はじめに

StreamlitはPythonで簡単にWebアプリを作れる人気のフレームワークです。データの可視化も得意ですが、標準のst.line_chart()st.bar_chart()では、インタラクティブなカスタムグラフには限界があります。

そこで登場するのが streamlit-echarts。このライブラリを使うことで、強力なチャートライブラリ「ECharts」をStreamlitで手軽に使えるようになります。

本記事では、streamlit-echartsの使い方を丁寧に解説し、折れ線グラフ・棒グラフ・レーダーチャートなど、実践的なグラフ作成方法をステップバイステップで紹介します。

2. streamlit-echartsとは?

streamlit-echartsは、Apache EChartsという高機能なJavaScript製チャートライブラリをStreamlitで使えるようにしたコンポーネントです。

✅ 主な特徴

3. セットアップ方法

まずは、Python環境にstreamlit-echartsをインストールしましょう。

Bash
pip install streamlit-echarts

すでにstreamlit本体がインストールされていない場合は、以下も実行してください。

Bash
pip install streamlit

4. 最小構成のグラフを表示してみよう

まずは、Hello World的な折れ線グラフを表示してみましょう。

🔰 サンプルコード

Python
import streamlit as st
from streamlit_echarts import st_echarts

st.title("最初のEChartsグラフ")

options = {
    "xAxis": {
        "type": "category",
        "data": ["", "", "", "", ""]
    },
    "yAxis": {
        "type": "value"
    },
    "series": [{
        "data": [820, 932, 901, 934, 1290],
        "type": "line"
    }]
}

st_echarts(options=options)

📝 解説

このように、JSON形式でグラフの設定を渡すだけで簡単に描画できます。

5. 棒グラフとインタラクション要素の追加

次は、より実用的な棒グラフを作り、ツールチップや凡例を追加してみましょう。

🧪 サンプルコード

Python
import streamlit as st
from streamlit_echarts import st_echarts

st.title("売上データの棒グラフ")

options = {
    "tooltip": {"trigger": "axis"},
    "legend": {"data": ["2023年", "2024年"]},
    "xAxis": {
        "type": "category",
        "data": ["1月", "2月", "3月", "4月", "5月"]
    },
    "yAxis": {
        "type": "value"
    },
    "series": [
        {"name": "2023年", "type": "bar", "data": [500, 700, 800, 600, 900]},
        {"name": "2024年", "type": "bar", "data": [600, 850, 950, 720, 1100]}
    ]
}

st_echarts(options=options, height="400px")

🔍 解説ポイント

6. レーダーチャートで項目評価を可視化

EChartsではレーダーチャートも簡単に描けます。製品評価や自己分析などに便利です。

🎯 サンプルコード

Python
import streamlit as st
from streamlit_echarts import st_echarts

st.title("レーダーチャートによる製品評価")

options = {
    "tooltip": {},
    "legend": {"data": ["製品A", "製品B"]},
    "radar": {
        "indicator": [
            {"name": "性能", "max": 100},
            {"name": "使いやすさ", "max": 100},
            {"name": "デザイン", "max": 100},
            {"name": "価格", "max": 100},
            {"name": "サポート", "max": 100}
        ]
    },
    "series": [{
        "name": "評価比較",
        "type": "radar",
        "data": [
            {"value": [80, 90, 70, 60, 85], "name": "製品A"},
            {"value": [70, 80, 85, 75, 90], "name": "製品B"}
        ]
    }]
}

st_echarts(options=options, height="500px")

7. CSVファイルのデータをグラフで可視化

最後に、CSVファイルをアップロードし、その中のデータをグラフ化する実践例を紹介します。

📄 CSVの内容(例)

売上
1月500
2月700
3月900

💻 サンプルコード

Python
import streamlit as st
import pandas as pd
from streamlit_echarts import st_echarts

st.title("CSVファイルから棒グラフを作成")

uploaded_file = st.file_uploader("CSVファイルをアップロードしてください", type="csv")

if uploaded_file:
    df = pd.read_csv(uploaded_file)
    st.write("データの内容", df)

    options = {
        "xAxis": {
            "type": "category",
            "data": df[""].tolist()
        },
        "yAxis": {
            "type": "value"
        },
        "series": [{
            "data": df["売上"].tolist(),
            "type": "bar"
        }]
    }

    st_echarts(options=options)

読み込むCSVファイルのサンプルです:

Plaintext
月,売上
1月,120
2月,150
3月,170
4月,140
5月,190
6月,210
7月,250
8月,230
9月,200
10月,220
11月,240
12月,300
https://js2iiu.com/wp-content/uploads/2025/05/64_04.mov

8. よくあるエラーとTips

❌ エラー1:xAxisやseriesの形式が正しくない

問題例:

Python
options = {
    "xAxis": {
        "data": ["A", "B", "C"]
    },
    "series": [100, 200, 300]  # ← 誤り!正しい形式ではない
}

エラーメッセージ例(Streamlit上)
「TypeError: series[0].type is required」など

解決方法:
EChartsは明示的にグラフのtype(line, barなど)や、dataをオブジェクトとして渡す必要があります。

修正例:

Python
options = {
    "xAxis": {
        "type": "category",
        "data": ["A", "B", "C"]
    },
    "yAxis": {
        "type": "value"
    },
    "series": [{
        "type": "bar",
        "data": [100, 200, 300]
    }]
}

❌ エラー2:Pandasのデータ型がEChartsと合わない

問題例:

Python
df = pd.DataFrame({
    "": ["1月", "2月", "3月"],
    "売上": [500, 600, 700]
})

# そのまま渡すと動かない
options = {
    "xAxis": {"type": "category", "data": df[""]},
    "series": [{"type": "bar", "data": df["売上"]}]
}

原因:
PandasのSeries型はEChartsが期待する**Pythonのリスト(list型)**ではありません。EChartsはlistdict型で構成されたオプションを期待します。

修正例:

Python
options = {
    "xAxis": {"type": "category", "data": df[""].tolist()},
    "yAxis": {"type": "value"},
    "series": [{"type": "bar", "data": df["売上"].tolist()}]
}

❌ エラー3:データの長さが一致しない

問題例:

Python
options = {
    "xAxis": {
        "type": "category",
        "data": ["A", "B", "C"]
    },
    "series": [{
        "type": "line",
        "data": [10, 20]  # ← 要素が2つしかなく、xAxisと不一致
    }]
}

結果:
EChartsの描画結果が正しく表示されなかったり、意図しないグラフになることがあります。

解決方法:
xAxis["data"]series[n]["data"]のリストの長さを一致させる。


✅ Tip1:高さや幅を指定して表示を整える

EChartsは自動でサイズ調整してくれますが、Streamlitの表示領域に合わせて明示的にheightを設定することで表示崩れを防止できます。

Python
st_echarts(options=options, height="400px", width="100%")

✅ Tip2:テーマ変更やレスポンシブ対応も可能

streamlit-echartsはEChartsのテーマ指定や、レスポンシブ設計にも対応しています。

🎨 ダークテーマの例:

Python
st_echarts(options=options, theme="dark")

📱 レスポンシブ対応:

Streamlitのカラムレイアウトやcontainer内でも利用可能なので、ダッシュボード開発にも便利です。


✅ Tip3:複数グラフの表示も可能

複数のst_echarts()を呼び出すことで、複数のグラフを同一ページに表示できます。

Python
col1, col2 = st.columns(2)

with col1:
    st.subheader("棒グラフ")
    st_echarts(options=bar_options)

with col2:
    st.subheader("折れ線グラフ")
    st_echarts(options=line_options)

補足:構文エラーをデバッグするには?

  1. オプションを生成するコードをst.write()で出力して確認:
Python
   st.write(options)
  1. JavaScriptでの構造が正しいかどうか、ECharts公式のオンラインエディタでも試せます。

9. まとめ

streamlit-echartsを使えば、Streamlitで高機能・インタラクティブなグラフを簡単に描画できます。
データ分析・ダッシュボード構築・社内ツール開発にも応用可能です。

10. 参考リンク

最後に書籍のPRです。
24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。Poetryについても詳しく説明されています。ぜひ手に取ってみてください。

最後まで読んでいただきありがとうございます。

モバイルバージョンを終了