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

Matplotlibのプロットにテーブル(表)を配置する方法

データの可視化では、グラフと一緒に表形式のデータを表示したいケースがよくあります。Matplotlibではtable()メソッドを使うことで、プロット上に簡単にテーブルを配置できます。この記事では、pandasのデータフレームをもとに、Matplotlibのプロット内に見栄えの良いテーブルを作成する手順を解説します。

実装の手順

  • subplots()メソッドを使って、フィギュアサイズ(7, 7)のfigureとサブプロット(Axes)を作成します。
  • time(日時)と speed(速度)の2つの列を持つpandasのデータフレームを作成します。
  • df.shapeなどで配列のサイズを取得します。
  • table()メソッドを使って、現在の軸(Axes)にテーブルを追加します。
  • テキストがセルの幅に収まるように、auto_set_font_size(False)で自動調整をオフにします。
  • set_fontsize()でテーブル全体のフォントサイズを設定します。
  • matplotlibのテーブルオブジェクトを反復処理しながら、セルごとに背景色・枠線の色・文字色を設定します。
  • plt.show()で図を保存・表示します。

コード例

以下は、日時と速度のデータを含むテーブルをMatplotlibのプロットに配置する完全なサンプルコードです。ヘッダー行は赤背景+白文字の太字にし、データ行は緑と黄色を交互に塗り分けて視認性を高めています。

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

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

# figureとサブプロットを作成
fig, ax = plt.subplots()

# time と speed の2列を持つデータフレームを作成
df = pd.DataFrame(dict(time=list(pd.date_range("2021-01-01 12:00:00", periods=10)),
speed=np.linspace(1, 10, 10)))

# テーブルを現在の軸に追加
mpl_table = ax.table(cellText=df.values, bbox=[0, 0, 1, 1], colLabels=df.columns)

# フォントサイズの自動調整を無効化し、サイズを明示的に指定
mpl_table.auto_set_font_size(False)
mpl_table.set_fontsize(12)

# セルごとに枠線の色・文字色・背景色を設定
for k, cell in mpl_table._cells.items():
    cell.set_edgecolor('black')
    if k[0] == 0 or k[1] < 0:
        # ヘッダー行:赤背景+白文字の太字
        cell.set_text_props(weight='bold', color='w')
        cell.set_facecolor('red')
    else:
        # データ行:緑と黄色を交互に塗り分け
        cell.set_facecolor(['green', 'yellow'][k[0] % 2])

plt.show()

出力結果

このコードを実行すると、ヘッダー行が赤く強調され、データ行が緑と黄色で交互に塗り分けられたテーブルが表示されます。各行には黒い枠線が引かれ、2021年1月1日12:00から始まる10件の日時データと、1〜10まで等間隔に増加する速度データがきれいに整形されて表示されます。

ポイントの解説

  • bbox=[0, 0, 1, 1] を指定すると、テーブルがAxes領域いっぱいに広がります。
  • colLabels=df.columns を渡すことで、データフレームの列名がそのままヘッダーとして使われます。
  • mpl_table._cells は内部辞書であり、キーは (行番号, 列番号) のタプルです。k[0] == 0 がヘッダー行を意味するため、条件分岐でスタイルを切り替えています。
  • より堅牢なコードにしたい場合は、プライベート属性 _cells ではなく get_celld() メソッドを使うことも可能です。

この手法を応用すれば、グラフの横にサマリー表を並べたり、複数のテーブルを組み合わせたダッシュボード風のレイアウトを作成したりすることもできます。ぜひ自分のデータに合わせて色やフォントサイズをカスタマイズしてみてください。

  1. PythonとMatplotlibを使って3次元の等高線図(コンタープロット)を作成する方法

    Matplotlibは、データ可視化のために広く使われている人気のPythonライブラリです。データの可視化は分析において非常に重要なステップであり、複雑な計算を行ったり数値を一つずつ確認したりしなくても、データの中で何が起きているのかを直感的に把握できるようになります。また、定量的な洞察を効果的に伝える手段としても役立ちます。Matplotlibは主に2次元のプロットを作成するために使用されますが、オブジェクト指向のAPIを備えており、作成したグラフをPythonアプリケーションに組み込むことも可能です。IPythonシェル、Jupyter Notebook、Spyder IDEなど、さまざ

  2. Pythonのmatplotlibで1つのグラフに3つの異なるデータセットをプロットする方法

    Matplotlibは、Pythonで最も広く利用されているデータ可視化ライブラリのひとつです。データを可視化することは、数値を一つひとつ確認したり複雑な計算を行ったりしなくても、データ全体の傾向や特徴を直感的に把握できるようにする重要なステップです。また、定量的な洞察を読者や聴衆に効果的に伝えるための手段としても非常に有効です。 Matplotlibは、データをもとに2次元のグラフやプロットを作成するために使用されます。オブジェクト指向のAPIを備えており、作成したグラフをPythonアプリケーションに簡単に組み込むことができます。IPythonシェル、Jupyter Notebook、Sp