Chapter 04

Seabornで棒グラフ

mimitako
mimitako
2022.10.09に更新

Bar plot の使い方

日本語では棒グラフとも呼ばれている Bar plot ですが、seaborn でも簡単に作成できます。

Bar plot の使い方

モジュールのインポート

使い始める前にいくつかのモジュールをインポートしておきます。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

データセットのインポート

今回使用するデータは iris(あやめ)のデータセットです。

iris_data = sns.load_dataset("iris")

データ構造は次の通りです。

sepal length はがくの長さ、sepal width はがくの幅、petal length は花びらの長さ、petal width は花びらの幅です。species は iris ことあやめの種類を示しています。

Bar plot を表示

まずは Bar plot を表示させてみます。

fig, ax = plt.subplots(1,1,dpi = 300)
ax = sns.barplot(data=iris_data, x = "species", y = "sepal_width")
ax.set_xlabel("species")
ax.set_ylabel("sepal_width")
ax.set_title("Iris sepal width")

data にはデータフレームを割り当てています。x はカテゴリデータ、y に Bar plot として表示したい数値データを入れます。

横向きにも対応

棒グラフは横向きでも利用されます。その場合は x と y を入れ替えるだけです。

fig, ax = plt.subplots(1,1,dpi = 300)
ax = sns.barplot(data=iris_data, y = "species", x = "sepal_width")
ax.set_ylabel("species")
ax.set_xlabel("sepal_width")
ax.set_title("Iris sepal width")

何を表示しているか

棒グラフのデータで同一カテゴリー内に複数のデータが存在するとき、そのデータが何を示しているのかを知っておく必要があります。

今回であれば setosa という種類のがくの幅の平均値は 3.428 です。グラフを見てもらうと平均値と一致していることがわかります。Bar plot は平均値を示すと覚えておく必要があります。

また、棒の先端に小さな黒い線があります。これは初期設定では 95%信頼区間を示しています。

統計データの変更

Bar plot のエラーバーに何を表示するか指定できます。sns.barplot の引数で errorbar=に下記を指定します。

ci: x%信頼区間、("ci",95)などと表記する。
pi: x%の確率区間、("pi", 95)などと表記する。
se: x 倍の標準誤差、("se", 3)などと表記する。
sd: x 倍の標準偏差、("sd", 3)などと表記する。

se および sd は文字列だけで指定できますが、その場合は 1 倍の値が自動で出力されます。

代表例として 3σ の範囲を組み込んだ Bar plot を描写します。

fig, ax = plt.subplots(1,1,dpi = 300)
ax = sns.barplot(data=iris_data, x = "species", y = "sepal_width", palette="hls", errorbar=("sd", 3))
ax.set_xlabel("species")
ax.set_ylabel("sepal_width")
ax.set_title("Iris sepal width")

目的に合わせて使い分けると良さそうですね。

グラフの見栄えを調整する

色の変更

他のプロットと同じく色を指定して変更することができます。単色での変更なら color を指定します。

ax = sns.barplot(data=iris_data, x = "species", y = "sepal_width", color = "grey")

カラーパレットを利用する場合は pallete を指定します。

ax = sns.barplot(data=iris_data, x = "species", y = "sepal_width", palette="hls")

エラーバーの色も変更可能です。引数にerroclorを指定します。

ax = sns.barplot(
  data=iris_data, 
  x = "species", 
  y = "sepal_width", 
  palette="hls", 
  errorbar=("sd", 3), 
  errcolor="b" # 青が指定される
  )

幅を変更する

Bar plotは幅が広すぎる、ギャップが広すぎるので見栄えに問題が出てくることがあります。ここでは幅の指定方法を見てみます。指定には引数としてwidthを指定し、値はfloatとなります。

width=0.1の場合

ax = sns.barplot(
  data=iris_data, 
  x = "species", 
  y = "sepal_width", 
  palette="hls", 
  width=0.1 # 幅を指定します。0 ~ 1の範囲とすればグラフが重なりません。1を超えることもできます。
  )

width=1.0の場合

width=1.5の場合

Bar plot本体の幅はwidthで指定できましたが、エラーバーはこの引数で指定できません。エラーバーはerrwidthという引数で指定します。

ax = sns.barplot(
  data=iris_data, 
  x = "species", 
  y = "sepal_width", 
  palette="hls", 
  errwidth=1 # 標準で2程度です。
  )

エラーバーにキャップを付ける

エラーバーはデフォルトで縦棒だけですが、キャップもつけられます。引数にはcapsizeでfloatを指定します。1本の棒が持つエリアに対してどれくらいのサイズなのかという指定方法です。

ax = sns.barplot(
  data=iris_data, 
  x = "species", 
  y = "sepal_width", 
  palette="hls", 
  errwidth=1,
  capsize=0.05 # 5%くらいでちょうど良い感じです。
  )

1を指定するとこんな感じになります。

ax = sns.barplot(
  data=iris_data, 
  x = "species", 
  y = "sepal_width", 
  palette="hls", 
  errwidth=1,
  capsize=1.0
  )