【Python Matplotlib】棒グラフの各バーの上にテキスト(数値ラベル)を表示する方法
Matplotlibで作成した棒グラフの各バーの上に、その値を示すテキスト(数値ラベル)を表示すると、グラフが格段に読みやすくなります。この記事では、bar()メソッドとtext()メソッドを組み合わせて、バーの上にテキストを配置する方法を解説します。
実装の手順
- 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。
- 年(years)、人口(population)、x座標のリストを作成し、バーの幅を表す変数を初期化します。
subplots()メソッドを使用して、図とサブプロットのセットを作成します。- y軸ラベル、タイトル、x目盛りの位置(xticks)とラベル(xticklabels)を設定します。
bar()メソッドにx・population・widthのデータを渡して、棒グラフを描画します。- バーのパッチを反復処理し、
text()メソッドを使って各バーの上部にテキストを配置します。 show()メソッドで図を表示します。
コード例
from matplotlib import pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
years = [1901, 1911, 1921, 1931, 1941, 1951, 1961, 1971, 1981, 1991, 2001, 2011]
population = [237.4, 238.4, 252.09, 251.31, 278.98, 318.66, 361.09,
439.23, 548.16, 683.33, 846.42, 1028.74]
x = np.arange(len(years)) # ラベルの位置
width = 0.35 # バーの幅
fig, ax = plt.subplots()
ax.set_ylabel('Population(in million)')
ax.set_title('Years')
ax.set_xticks(x)
ax.set_xticklabels(years)
pps = ax.bar(x - width / 2, population, width, label='population')
for p in pps:
height = p.get_height()
ax.text(x=p.get_x() + p.get_width() / 2, y=height+.10,
s="{}".format(height),
ha='center')
plt.show()
ポイント解説
バーの上にテキストを表示する仕組みはシンプルです。ax.bar()は戻り値としてBarContainer(バーのパッチのコレクション)を返します。これをfor文で反復処理しながら、各バーに対して以下の情報を取得します。
p.get_height():バーの高さ(=データの値)p.get_x() + p.get_width() / 2:バー中央のx座標
取得した座標をもとにax.text()でテキストを描画します。y=height+.10のように少しオフセットを加えることで、テキストがバーに重ならず、バーのすぐ上にきれいに表示されます。また、ha='center'を指定することで、テキストがバーの中央に揃えられます。
出力結果
上記のコードを実行すると、1901年から2011年までの人口データを示した棒グラフが表示され、各バーの上に対応する人口の値(百万単位)が自動的にラベルとして付与されます。

-
Matplotlibでプロット上のテキストをアニメーション表示する方法
Matplotlibでは、FuncAnimationクラスを活用することで、プロット上に配置したテキストを簡単にアニメーション化できます。例えば、文字が一文字ずつタイプされていくような演出も実装可能です。 実装の手順 figureのサイズを設定し、サブプロット間・周囲の余白(パディング)を自動調整します。 X軸とY軸の表示範囲(リミット)を指定します。 表示したい文章を格納するstring変数を初期化します。 text()メソッドを使って、プロット上にテキストを配置します。 FuncAnimation()を用いてテキストをアニメーション化し、フレームごとに表示する文字列を更新します。 axi
-
Matplotlibのプロット凡例にテキストラベルだけを表示する方法
Matplotlibでプロットの凡例にテキストラベルだけを表示したい場合は、legend()メソッドにhandlelength=0、handletextpad=0、fancybox=Trueといった引数を指定します。これにより、通常は凡例の左側に表示される線やマーカーなどのハンドル(サンプルグラフィック)が非表示になり、ラベルのテキストのみがすっきりと表示されます。手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用してランダムな x および y のデータポイントを作成します。subplots()メソッドを使って、図とサブプロットのセットを作成しま