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

【Python】MatplotlibでテーブルをX軸に揃えて表示する方法

はじめに

データ可視化において、グラフと表を組み合わせて表示すると、数値の詳細を視覚的にも分かりやすく伝えられます。Pythonのmatplotlibでは、plt.table()メソッドを活用することで、棒グラフのX軸部分にテーブルをきれいに配置できます。

この記事では、積み上げ棒グラフの下部にテーブルをX軸に沿って揃えて表示する具体的な手順とコード例を解説します。

実装手順

  • 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。

  • データフレーム用のデータリストを作成します。

  • データフレームのcolumns(列名)に対応するタプルを作成します。

  • rows(行ラベル)values(値)のリストを作成します。

  • 変数value_incrementを初期化します。

  • データポイントをもとに棒グラフを描画します。

  • データをテーブルとして配置します。

  • グラフのyラベル・yticks・xticks・タイトルを設定します。

  • 図を表示するにはshow()メソッドを使用します。

コード例

import numpy as np
import matplotlib.pyplot as plt

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

data = [
    [66386, 174296, 75131, 577908, 32015],
    [58230, 381139, 78045, 99308, 160454],
    [89135, 80552, 152558, 497981, 603535],
    [78415, 81858, 150656, 193263, 69638],
    [139361, 331509, 343164, 781380, 52269]
]

columns = ('Freeze', 'Wind', 'Flood', 'Quake', 'Hail')
rows = ['%d year' % x for x in (100, 50, 20, 10, 5)]

values = np.arange(0, 2500, 500)
value_increment = 1000

colors = plt.cm.BuPu(np.linspace(0, 0.5, len(rows)))
n_rows = len(data)

index = np.arange(len(columns)) + 0.3
bar_width = 0.4
y_offset = np.zeros(len(columns))
cell_text = []

for row in range(n_rows):
    plt.bar(index, data[row], bar_width, bottom=y_offset, color=colors[row])
    y_offset = y_offset + data[row]
    cell_text.append(['%1.1f' % (x / 1000.0) for x in y_offset])

colors = colors[::-1]
cell_text.reverse()
the_table = plt.table(cellText=cell_text,
    rowLabels=rows,
    rowColours=colors,
    colLabels=columns,
    loc='bottom')

plt.subplots_adjust(left=0.2, bottom=0.2)

plt.ylabel("Loss in ${0}'s".format(value_increment))
plt.yticks(values * value_increment, ['%d' % val for val in values])

plt.xticks([])

plt.title('Loss by Disaster')

plt.show()

ポイント解説

  • plt.table(loc='bottom')を指定することで、テーブルがグラフの下部(X軸の位置)に揃えて配置されます。

  • plt.xticks([])でX軸の目盛りラベルを非表示にしています。これは、テーブルの列ラベル(colLabels)がその役割を果たすためです。

  • plt.subplots_adjust(left=0.2, bottom=0.2)により、行ラベルやテーブルが図の外にはみ出さないよう余白を確保しています。

  • 各セルのテキストは累積値を1000で割った値として表示しており、Y軸の単位($1000単位)と整合性が取れています。

出力結果

上記のコードを実行すると、次のような出力が得られます。

【Python】MatplotlibでテーブルをX軸に揃えて表示する方法

  1. PythonでPandasのデータフレームを使ってmatplotlib散布図を作成する方法

    散布図は、2つの変数間の関係を視覚的に把握するのに非常に便利なグラフです。Pandasを使えばデータフレームを簡単に作成でき、さらにsubplots()メソッドで図(fig)と軸(ax)の変数を生成できます。その後、ax.scatter()メソッドを呼び出すことで、目的の散布図を描画することが可能です。 手順 生徒数のリストを作成します。 生徒が取得した点数のリストを作成します。 各散布点の色を表現するために、色のリストを用意します。 Pandasを使って、データフレームの軸となるデータをリストとして定義します。 subplots()メソッドでfig変数とax変数を作成します。デフォルトでは

  2. Pythonのmatplotlibで1つのページに複数のプロットを作成する方法

    Pandasとmatplotlibを組み合わせることで、データフレームから図(figure)と軸(axis)を簡単に作成し、scatterメソッドを使って点をプロットできます。ここでは、学生の人数と取得点数の関係を散布図として可視化する手順を紹介します。 実装の手順 学生のリスト、各学生が取得した点数のリスト、スコアごとの色分け用リストを作成します。 PandasのDataFrameを使って、手順1のデータからデータフレームを作成します。 subplotsメソッドでfigとax変数を作成します。デフォルトでは行数(nrows)と列数(ncols)はどちらも1に設定されています。 plt.xl