Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีวางตารางข้อมูลบนกราฟใน Matplotlib

Matplotlib รองรับการเพิ่มตารางข้อมูล (table) ลงในกราฟได้โดยตรงผ่านเมธอด ax.table() เหมาะสำหรับการแสดงข้อมูลสรุป พร้อมกับการจัดรูปแบบเซลล์ สีพื้นหลัง และข้อความ

ขั้นตอนการทำงาน

  1. นำเข้า numpy, pandas, และ matplotlib.pyplot
  2. สร้าง Figure และ Axes ด้วย plt.subplots()
  3. สร้าง DataFrame จากข้อมูล (เช่น เวลาและความเร็ว)
  4. คำนวณขนาดตารางให้เหมาะสมกับ Figure
  5. เพิ่มตารางด้วย ax.table() โดยระบุ cellText, bbox, และ colLabels
  6. ปิดการปรับขนาดฟอนต์อัตโนมัติด้วย auto_set_font_size(False) แล้วตั้งค่าด้วย set_fontsize()
  7. จัดรูปแบบเซลล์แต่ละเซลล์ผ่าน mpl_table._cells.items():
    • ตั้งค่าสีขอบ (set_edgecolor)
    • ตั้งค่าสีพื้นหลัง (set_facecolor)
    • ตั้งค่าสีและน้ำหนักตัวอักษร (set_text_props)
  8. แสดงผลด้วย plt.show()

ตัวอย่างโค้ด

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

fig, ax = plt.subplots()
df = pd.DataFrame(dict(
    time=list(pd.date_range("2021-01-01 12:00:00", periods=10)),
    speed=np.linspace(1, 10, 10)
))

size = (np.array(df.shape[::-1]) + np.array([0, 1])) * np.array([3.0, 6.0])
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()

คำอธิบายโค้ดสำคัญ

  • bbox=[0, 0, 1, 1] - ตำแหน่งและขนาดตารางในพิกัด Axes (0-1)
  • colLabels=df.columns - ใช้ชื่อคอลัมน์เป็นหัวตาราง
  • k[0] คือแถว (row), k[1] คือคอลัมน์ (column)
  • แถวที่ 0 (hdr) และคอลัมน์ -1 (index) จะได้รับสีพิเศษ
  • สลับสีแถวคู่คี่ด้วย ['green', 'yellow'][k[0] % 2]

การปรับแต่งเพิ่มเติม

  • ใช้ cellLoc='center' ใน table() เพื่อจัดกึ่งกลางข้อความ
  • เพิ่ม edges='horizontal' เพื่อแสดงเฉพาะเส้นแนวนอน
  • สำหรับตารางขนาดใหญ่ ใช้ bbox ที่เล็กลงเพื่อให้เหลือพื้นที่สำหรับกราฟ

การประยุกต์ใช้

เหมาะสำหรับรายงานแดชบอร์ด การแสดงข้อมูลสถิติพร้อมกราฟ หรือการสร้างรายงาน PDF ที่ต้องการตารางและกราฟในหน้าเดียวกัน