1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pandas データから簡単可視化:エラーバー付き横棒グラフを Streamlit + Plotly で描く

Posted at

user:

ユーザは、pandas dataframe 形式のデータと、ある変数の名前を表す列の名前、その変数の平均値を示す列の名前、標準偏差を示す列の名前、の合計4つを入力します。そうすると、平均値の高い順番にエラーバーつき横棒グラフを表示する関数を書いてください。平均値が正の場合は青色、負の場合は赤色の棒グラフにしてください。

assistant:

以下は、指定された形式の pandas.DataFrame と列名を引数にとり、平均値の降順にエラーバー付き横棒グラフを表示する関数です。平均値が正なら青、負なら赤になります。

import pandas as pd
import matplotlib.pyplot as plt

def plot_horizontal_bars_with_error(df, label_col, mean_col, std_col):
    """
    平均値の高い順に、エラーバー付き横棒グラフを表示する関数。
    
    Parameters:
        df (pd.DataFrame): データフレーム
        label_col (str): ラベル(変数名)を含む列の名前
        mean_col (str): 平均値を含む列の名前
        std_col (str): 標準偏差を含む列の名前
    """
    # 平均値で降順にソート
    df_sorted = df.sort_values(by=mean_col, ascending=False)

    # 色のリストを作成(正:青、負:赤)
    colors = ['blue' if val >= 0 else 'red' for val in df_sorted[mean_col]]

    # グラフの作成
    plt.figure(figsize=(10, len(df_sorted) * 0.5))
    plt.barh(
        y=df_sorted[label_col],
        width=df_sorted[mean_col],
        xerr=df_sorted[std_col],
        color=colors,
        edgecolor='black',
        alpha=0.8
    )
    plt.xlabel('平均値')
    plt.ylabel('変数')
    plt.title('平均値と標準偏差による横棒グラフ')
    plt.gca().invert_yaxis()  # 上が大きい順になるように反転
    plt.grid(axis='x', linestyle='--', alpha=0.7)
    plt.tight_layout()
    plt.show()

使用例

# サンプルデータ
data = {
    '変数名': ['A', 'B', 'C', 'D'],
    '平均': [2.5, -1.2, 0.8, -2.0],
    '標準偏差': [0.5, 0.4, 0.3, 0.6]
}
df = pd.DataFrame(data)

# 関数の呼び出し
plot_horizontal_bars_with_error(df, label_col='変数名', mean_col='平均', std_col='標準偏差')

メモ

  • matplotlib を使用しています。必要なら pip install matplotlib でインストールしてください。
  • グラフの縦幅は変数数に応じて自動調整されるようになっています。

user:

ユーザは、pandas dataframe 形式のデータと、ある変数の名前を表す列の名前、その変数の平均値を示す列の名前、標準偏差を示す列の名前、の合計4つを入力します。そうすると、平均値の高い順番にエラーバーつき横棒グラフを表示する関数を書いてください。平均値が正の場合は青色、負の場合は赤色の棒グラフにしてください。streamlit用にplotlyで描いてください。

assistant:

以下は、Streamlit用に plotly を使ってエラーバー付き横棒グラフを描画する関数です。
平均値が正の場合は青、負の場合は赤のバーで表示され、平均値の降順で並び替えられます。


✅ 関数定義(plotly + Streamlit 用)

import pandas as pd
import plotly.graph_objects as go

def plot_horizontal_bars_with_error_plotly(df, label_col, mean_col, std_col):
    """
    平均値の高い順に、エラーバー付き横棒グラフを Plotly で表示する(Streamlit対応)

    Parameters:
        df (pd.DataFrame): データフレーム
        label_col (str): ラベル(変数名)を含む列の名前
        mean_col (str): 平均値を含む列の名前
        std_col (str): 標準偏差を含む列の名前

    Returns:
        fig (plotly.graph_objects.Figure): 横棒グラフのFigureオブジェクト
    """
    # 平均値の降順に並び替え
    df_sorted = df.sort_values(by=mean_col, ascending=False)

    # 色を指定:正なら青、負なら赤
    colors = ['blue' if val >= 0 else 'red' for val in df_sorted[mean_col]]

    # 横棒グラフ作成
    fig = go.Figure(go.Bar(
        x=df_sorted[mean_col],
        y=df_sorted[label_col],
        error_x=dict(type='data', array=df_sorted[std_col], visible=True),
        orientation='h',
        marker=dict(color=colors),
        hovertemplate=f'{label_col}: %{{y}}<br>{mean_col}: %{{x}}<br>{std_col}: %{{error_x.array}}<extra></extra>'
    ))

    fig.update_layout(
        title='平均値と標準偏差による横棒グラフ',
        xaxis_title='平均値',
        yaxis_title='変数',
        yaxis=dict(autorange='reversed'),  # 上から高い順に
        template='plotly_white',
        height=max(400, len(df_sorted) * 40)  # 変数の数に応じて高さを調整
    )

    return fig

✅ Streamlit 側での使用例

import streamlit as st
import pandas as pd

# サンプルデータ
data = {
    '変数名': ['A', 'B', 'C', 'D'],
    '平均': [2.5, -1.2, 0.8, -2.0],
    '標準偏差': [0.5, 0.4, 0.3, 0.6]
}
df = pd.DataFrame(data)

# グラフ生成と表示
fig = plot_horizontal_bars_with_error_plotly(df, label_col='変数名', mean_col='平均', std_col='標準偏差')
st.plotly_chart(fig, use_container_width=True)

💡 注意点

  • plotlystreamlit が必要です。未インストールなら以下で追加:
pip install plotly streamlit
  • hovertemplate でエラーバーの値もツールチップに表示されます。

何かカスタマイズ(例:色分けのしきい値変更、フォント調整など)をご希望でしたらお気軽にどうぞ。

user:

ありがとうございました!今回の会話をブログに残したいので、タイトル案をいくつか提案していただけませんか?

assistant:

こちらこそありがとうございました!今回の内容をもとに、ブログのタイトル案をいくつか提案いたします。Streamlit × Plotly の横棒グラフ作成に焦点を当てたものです。


💡 タイトル案

1️⃣ 「Streamlit × Plotly で作る!平均値と標準偏差を可視化するエラーバー付き横棒グラフ」
2️⃣ 「平均値が正なら青、負なら赤!Plotly でインタラクティブな横棒グラフを Streamlit に組み込む方法」
3️⃣ 「pandas データから簡単可視化:エラーバー付き横棒グラフを Streamlit + Plotly で描く」
4️⃣ 「Plotly + Streamlit で実現!平均値順の横棒グラフを美しく描く方法」
5️⃣ 「Python で平均値と標準偏差を動的に可視化:Plotly 横棒グラフのレシピ」
6️⃣ 「Streamlit アプリで使える!Plotly 横棒グラフ+エラーバーの作り方」
7️⃣ 「色で直感的にわかる!平均値の符号で色分けする Plotly 横棒グラフの作成ガイド」


もしターゲット層(例:初学者向け、実務向け、研究向け)やキーワードの希望があれば、さらに調整した案もお出しできます!どの方向性に寄せたいか教えてください。

user:

「pandas データから簡単可視化:エラーバー付き横棒グラフを Streamlit + Plotly で描く」で行きたいと思います。最後にまとめを書いてください。

assistant:

素晴らしいタイトルの選択です!それでは記事のまとめ案をお届けします。ブログの締めとしてそのままお使いいただけます。


📝 まとめ

本記事では、pandas データフレームに含まれる平均値と標準偏差をもとに、エラーバー付きの横棒グラフを Plotly で作成し、それを Streamlit 上でインタラクティブに表示する方法をご紹介しました。

今回のポイントは次の通りです:

平均値の高い順に並び替えて表示することで、視覚的に重要な変数が一目で分かるグラフを作成
平均値が正なら青、負なら赤に色分けし、データの符号や傾向を直感的に理解可能にした
Plotly のインタラクティブ性により、ツールチップやズーム、スクロールなどの操作が可能
Streamlit との組み合わせで、アプリ化・共有・ダッシュボード化が容易

このように、わずか数十行のコードで高品質な可視化が可能です。
ぜひご自身のデータに合わせてカスタマイズし、データ分析やレポート、ダッシュボード作成に活用してみてください。


💡 次のステップとして:

  • 凡例や注釈を追加する
  • 動的に列選択を切り替えられる Streamlit UI を作成する
  • 他の可視化(ヒートマップ、散布図など)と組み合わせて多角的に分析する

もし今回のコードの発展版や応用例が必要であれば、ぜひお気軽にお声がけください! 🚀

user:

ありがとうございました!

assistant:

どういたしまして!こちらこそご相談いただきありがとうございました😊
またいつでもお気軽にお声がけください。データ可視化やStreamlitアプリの構築、さらに高度な分析までお手伝いします!

良いブログ執筆、そして開発をお祈りしています✨

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?