Seabornを用いた棒グラフ(barplot)の作り方

Seabornのbarplot関数は、カテゴリー別の数値データの集計値(点推定値)とその誤差範囲を棒グラフで表現するための強力なツールです。この記事では、barplot関数のパラメーターとその使い方を詳しく解説します。

seaborn.barplot の概要

seaborn.barplotは、数値変数の集計や統計推定値を矩形の高さで表し、その推定値の不確実性をエラーバーで示します。バーplotは、0を軸範囲に含み、変数にとって0が意味のある値となる場合に適しています。

主要パラメータ

  • data: プロット用のデータセット。xyが省略された場合、wide-formと解釈されます。それ以外の場合は、long-formが想定されます。
  • x, y, hue: data内の変数の名前、またはベクトルデータ。long-formデータの描画用の入力です。
  • order, hue_order: カテゴリーレベルを描画する順序。指定がない場合は、データオブジェクトから推測されます。
  • estimator: 各カテゴリービン内で推定する統計関数。文字列またはベクトル->スカラーをマッピングするcallable。
  • errorbar: エラーバーの方法。"ci", "pi", "se", "sd"の文字列、またはメソッド名とレベルパラメーターのタプル、またはベクトルから(min, max)区間へのマッピング関数、またはNone。
  • n_boot: 信頼区間を計算するために使用されるブートストラップサンプルの数。
  • orient: プロットの向き(縦または横)。通常、入力変数の種類に基づいて推測されますが、両方のxyが数値またはwide-formデータを描画する場合に曖昧さを解消するために使用されます。

追加パラメータ

  • color, palette: プロットの要素の色または、hue変数の異なるレベルの色。
  • saturation: 塗りつぶし色を描画する際の元の彩度の割合。1に設定すると、色が入力値と完全に一致します。
  • fill: Trueの場合、固定パッチを使用。そうでなければ、線画として描画されます。
  • width: orient軸上で各要素に割り当てられた幅。
  • dodge: hueマッピングが使用される場合に、要素が狭くなり、orient軸に沿ってシフトして重なり合わないようにするかどうか。
  • capsize: エラーバーの「キャップ」の幅。

Seabornのbaplotで作る棒グラフの例

このチュートリアルでは、Seabornを使用して様々なスタイルと設定でバーplotを作成する方法について説明します。具体的な例を通じて、Seabornのbarplot機能の柔軟性と強力さを紹介します。

1. 基本的なバーplotの作成

カテゴリ変数によるグルーピングと集計値のプロット

import seaborn as sns
sns.set_theme()

# データセットの読み込み
penguins = sns.load_dataset("penguins")

# 基本的なバーplot
sns.barplot(data=penguins, x="island", y="body_mass_g")

このコードは、penguinsデータセットの各島(island)について、ペンギンの体重(body_mass_g)の平均値をプロットします。

seaborn barplot

2. hueパラメータを使用してグループ化

グループ化変数をhueに割り当てる

sns.barplot(data=penguins, x="body_mass_g", y="island", hue="island", legend=False)

ここでは、island変数に基づいて色分けされたバーplotを作成し、それぞれの島を異なる色で表示しています。

seaborn barplot, hue

3. wide-formデータフレームのプロット

wide-formデータの各列を集約してバーplotを作成

flights = sns.load_dataset("flights")
flights_wide = flights.pivot(index="year", columns="month", values="passengers")

# wide-formデータフレームのプロット
sns.barplot(data=flights_wide)

このコードでは、flights_wideデータフレームの各列をバーplotで表現しています。

seaborn barplot, wide-form

4. シリーズのプロット

シリーズ(または辞書)をプロットする

# 特定の月のデータをプロット
sns.barplot(data=flights_wide["Jun"])
seaborn barplot, series

5. hueでの2層グループ化

sns.barplot(data=penguins, x="island", y="body_mass_g", hue="sex")
seaborn barplot, 2層グループ化

6. 標準偏差でエラーバー表示

sns.barplot(data=penguins, x="island", y="body_mass_g", errorbar="sd")
seaborn barplot, error bar

7. 異なる集約関数の使用とエラーバーの無効化

sns.barplot(data=flights, x="year", y="passengers", estimator="sum", errorbar=None)
seaborn barplot, no error bar

8. バーの値にテキストラベルを追加

ax = sns.barplot(data=flights, x="year", y="passengers", estimator="sum", errorbar=None)
ax.bar_label(ax.containers[0], fontsize=10)
seaborn barplot, text label

9. 元のスケーリングの保存と数値座標による注釈の追加

ax = sns.barplot(data=flights, x="year", y="passengers", native_scale=True, estimator="sum", errorbar=None)
ax.plot(1955, 3600, "*", markersize=10, color="r")
seaborn barplot, original scaling, annotation

10. orientを使用して、どの変数がグループ化されるべきかの曖昧さを解決

sns.barplot(data=flights, x="passengers", y="year", orient="y")
seaborn barplot, orient

11. matplotlibのキーワード引数を使用してプロットの外観をカスタマイズ

sns.barplot(
    data=penguins, x="body_mass_g", y="island",
    errorbar=("pi", 50), capsize=.4,
    err_kws={"color": ".5",

 "linewidth": 2.5},
    linewidth=2.5, edgecolor=".5", facecolor=(0, 0, 0, 0),
)
seaborn barplot, matplotlib

12. catplot()を使用して面分割バーplotを描画

sns.catplot(
    data=penguins, kind="bar",
    x="sex", y="body_mass_g", col="species",
    height=4, aspect=.5,
)
seaborn barplot, catplot

まとめ

seabornを用いてさまざまな散布図の作り方を見てきました。データの分析やプレゼンテーションに役立てていただけると幸いです。

上部へスクロール