Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlib/Seabornでカウントプロットのバー上部にカウント値を表示する方法

Seabornのcountplot(カウントプロット)で、各バーの上部にカウント値(度数)を表示する方法を解説します。カテゴリごとのデータ件数をひと目で把握できるようになるため、レポートやダッシュボード作成時に非常に便利なテクニックです。

実装手順

  • plt.rcParamsを使って図のサイズを設定し、サブプロット間・周囲のパディングを自動調整します。

  • 1列だけのデータを持つPandasデータフレームを作成します。

  • カウントプロットは、量的変数ではなくカテゴリ変数に対するヒストグラムのようなものと考えることができます。ここではsns.countplot()を使って描画します。

  • カウントプロットが返すAxesオブジェクト内の各バー(patches)を反復処理し、ax.annotate()でバーの上部にカウント値を表示します。

  • 最後にplt.show()メソッドを呼び出して図を表示します。

コード例

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

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

df = pd.DataFrame(dict(col1=np.array([2, 4, 1, 1, 1, 4])))

ax = sns.countplot(x="col1", data=df)

for p in ax.patches:
    ax.annotate('{:.1f}'.format(p.get_height()), (p.get_x()+0.25, p.get_height()+0.01))

plt.show()

ポイント解説

このコードの重要な部分はfor p in ax.patches:のループ処理です。ax.patchesには各バーのRectangleオブジェクトが格納されており、以下のメソッドで位置情報を取得できます。

  • p.get_height():バーの高さ=そのカテゴリのカウント数を取得します。

  • p.get_x():バーの左端のx座標を取得します。0.25を加算することでラベルをバーの中央付近に配置しています。

  • p.get_height()+0.01:y座標を少し上にずらし、バーの上端にラベルが重ならないようにしています。

なお、小数点表示が不要な場合は'{:.1f}''{:d}'または'{:.0f}'に変更すると整数表示になります。

出力結果

上記のコードを実行すると、各バーの上部にカウント値が表示された次のようなカウントプロットが出力されます。

Matplotlib/Seabornでカウントプロットのバー上部にカウント値を表示する方法

  1. Matplotlibのプロット凡例にテキストラベルだけを表示する方法

    Matplotlibでプロットの凡例にテキストラベルだけを表示したい場合は、legend()メソッドにhandlelength=0、handletextpad=0、fancybox=Trueといった引数を指定します。これにより、通常は凡例の左側に表示される線やマーカーなどのハンドル(サンプルグラフィック)が非表示になり、ラベルのテキストのみがすっきりと表示されます。手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用してランダムな x および y のデータポイントを作成します。subplots()メソッドを使って、図とサブプロットのセットを作成しま

  2. FlaskでMatplotlibのグラフを表示する方法【サンプルコード付き】

    Webアプリケーション上でグラフを動的に表示したい場合、FlaskとMatplotlibを組み合わせるのが効果的です。この記事では、Flaskアプリケーション内でMatplotlibのプロットをPNG画像としてブラウザに返す方法を、具体的な手順とサンプルコードとともにわかりやすく解説します。 実装の流れ FlaskでMatplotlibのグラフを表示するまでの基本的な手順は以下の通りです。 小さなFlaskアプリケーションを作成する カレントディレクトリに移動し、環境変数を設定してアプリを起動する$ export FLASK_APP=file.py$ flask run ブラウザで http