Aksesor plot pada Series dan DataFrame menggambar grafik langsung dari data tabular, dengan matplotlib sebagai mesin penggambarnya di belakang layar. Topik ini mempraktikkan empat jenis plot bawaan pada log sensor suhu dan kelembapan, yaitu garis untuk deret waktu, batang untuk agregasi per ruang, histogram untuk distribusi suhu, dan sebar untuk hubungan dua besaran. Setelah membaca, setiap jenis plot dapat dibuat dari dataset kontrak jalur ini, dibaca maknanya, dan dipilih sesuai pertanyaan analisis yang dihadapi.
Plot garis untuk deret waktu#
Plot garis (line plot) menghubungkan nilai-nilai berurutan dengan segmen garis sehingga pola sepanjang waktu terlihat, dan bentuk ini dipanggil melalui .plot(kind="line") pada sebuah Series. Sumbu x diambil dari index deret, sedangkan sumbu y berisi nilai-nilainya. Kolom waktu pada dataset kontrak disimpan sebagai kolom biasa, sehingga kolom itu dijadikan index terlebih dahulu melalui set_index("waktu") agar sumbu horizontalnya menunjukkan waktu. Blok pertama membangun dataset dan menyimpannya sebagai sensor_log.csv, sedangkan blok-blok berikutnya cukup membaca berkas yang sama kembali.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
rng = np.random.default_rng(42)
n = 96
df = pd.DataFrame({
"waktu": pd.date_range("2026-01-05 07:00", periods=n, freq="15min"),
"ruang": rng.choice(["Lab A", "Lab B", "Ruang Arsip"], n, p=[0.4, 0.35, 0.25]),
"suhu_c": np.round(rng.normal(24, 1.5, n), 1),
"lembap_pct": np.round(rng.normal(60, 5, n), 1),
"status_sensor": rng.choice(["normal", "kalibrasi", "rusak"], n, p=[0.85, 0.10, 0.05]),
})
df.to_csv("sensor_log.csv", index=False) # dataset bersama untuk seluruh modul
df = pd.read_csv("sensor_log.csv", parse_dates=["waktu"])
lab_a = df[df["ruang"] == "Lab A"].set_index("waktu")
lab_a["suhu_c"].plot(kind="line", ylabel="Suhu (°C)")
plt.savefig("suhu-waktu-lab-a.svg")
print("tersimpan suhu-waktu-lab-a.svg")tersimpan suhu-waktu-lab-a.svgGambar yang dihasilkan memuat bacaan suhu Lab A selama satu hari pencatatan dengan interval 15 menit. Nilainya bergerak naik turun pada rentang 21.4 sampai 27.2 derajat Celsius, dengan sebagian besar bacaan berkumpul di kisaran 22 sampai 26 derajat dan puncak tertinggi 27.2 derajat tercatat pada pergantian tanggal. Pola naik turun tanpa tren yang rapi seperti ini wajar bagi ruangan yang suhunya dikendalikan pendingin. Plot garis dipilih ketika urutan antar titik bermakna, misalnya deret waktu atau langkah proses yang berurutan.
Plot batang untuk agregasi per ruang#
Plot batang (bar plot) memetakan setiap kategori pada sumbu x dan nilai agregatnya sebagai tinggi batang, sehingga perbandingan antar kelompok terbaca secara langsung. Berbeda dari plot garis, data mentahnya harus diringkas lebih dahulu, dan df.groupby("ruang")["suhu_c"].mean() menyediakan satu angka per ruang. Index hasil pengelompokan menjadi label kategori pada sumbu x, sedangkan tinggi batang mengikuti nilai rata-ratanya.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("sensor_log.csv", parse_dates=["waktu"])
rata = df.groupby("ruang")["suhu_c"].mean()
rata.plot(kind="bar", ylabel="Suhu rata-rata (°C)")
plt.savefig("rata-suhu-ruang.svg")
print("tersimpan rata-suhu-ruang.svg")tersimpan rata-suhu-ruang.svgKetiga batang memuat rata-rata 23.7306 derajat untuk Lab A, 23.8079 derajat untuk Lab B, dan 24.2591 derajat untuk Ruang Arsip. Ruang Arsip tampak paling tinggi, tetapi ketiga batang nyaris sama rata karena sumbu y dimulai dari nol, padahal selisih ruang tertinggi terhadap yang terendah hanya 0.53 derajat. Apabila selisih sekecil itu memang fokus analisis, rentang sumbu y dapat dibatasi melalui objek Axes yang dikembalikan .plot, atau plot jenis lain dipertimbangkan. Plot batang dipilih ketika besaran yang diperbandingkan sudah berupa satu angka per kategori.
Histogram untuk distribusi suhu#
Histogram membagi rentang nilai ke dalam bin, yaitu selang berlebar sama, kemudian menghitung jumlah bacaan pada setiap selangnya. Bentuk ini dipanggil melalui .plot(kind="hist") pada satu kolom numerik dan membutuhkan parameter bins untuk menetapkan banyaknya selang. Label kedua sumbunya dapat diganti melalui parameter xlabel dan ylabel agar besaran yang dihitung terbaca jelas.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("sensor_log.csv", parse_dates=["waktu"])
df["suhu_c"].plot(kind="hist", bins=20, xlabel="Suhu (°C)", ylabel="Jumlah bacaan")
plt.savefig("distribusi-suhu.svg")
print("tersimpan distribusi-suhu.svg")tersimpan distribusi-suhu.svgDistribusi suhu seluruh ruangan menumpuk pada kisaran 22 sampai 25 derajat dengan batang tertinggi menampung 15 bacaan pada selang sekitar 24.2 sampai 24.6 derajat, kemudian menurun ke kedua arahnya hingga batas 20.8 dan 28.4 derajat. Ekor kanan yang lebih panjang menunjukkan beberapa bacaan hangat yang jarang terjadi. Banyaknya bin menentukan kehalusan pembacaan, karena bin yang terlalu sedikit menyembunyikan bentuk distribusi, sedangkan yang terlalu banyak memunculkan batang berlubang akibat data yang terlalu jarang pada satu selang. Histogram dipilih ketika bentuk sebaran satu besaran ingin dilihat sebelum data diringkas menjadi rata-rata.
Plot sebar untuk hubungan dua besaran#
Plot sebar (scatter plot) menempatkan satu titik untuk setiap baris pada perpotongan dua kolom numerik, dan bentuk ini dipanggil pada DataFrame dengan parameter x dan y. Nama kolom yang dipilih otomatis menjadi label kedua sumbunya, sehingga plot pertama tidak membutuhkan penataan tambahan apa pun. Parameter lain diteruskan langsung ke matplotlib, misalnya alpha=0.4 yang menurunkan kepekatan titik sehingga wilayah bertumpuk terlihat lebih gelap dan pola kepadatannya tetap terbaca pada data yang jauh lebih besar.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("sensor_log.csv", parse_dates=["waktu"])
df.plot(kind="scatter", x="suhu_c", y="lembap_pct")
plt.savefig("sebar-suhu-lembap.svg")
print("tersimpan sebar-suhu-lembap.svg")tersimpan sebar-suhu-lembap.svgTitik-titik pada gambar menyebar tanpa pola garis yang jelas, sehingga suhu dan kelembapan pada data ini tidak menunjukkan hubungan yang kuat. Sebaran seperti itu tetap berguna, karena ketiadaan pola juga merupakan temuan yang menghentikan asumsi yang belum terbukti. Nilai kekuatan hubungannya dihitung eksplisit dengan korelasi pada topik Peran Seaborn. Plot sebar dipilih ketika hubungan dua besaran, pencarian kelompok, atau pencarian pencilan menjadi pertanyaan utamanya.
Ringkasan#
.plot(kind="line")memakai index sebagai sumbu x dan nilai sebagai sumbu y, sehingga kolom waktu dijadikan index melaluiset_index("waktu")terlebih dahulu.- Plot batang menggambar data yang sudah diagregasi, misalnya keluaran
df.groupby("ruang")["suhu_c"].mean(), dengan kunci grup sebagai label sumbu x. - Histogram dengan
bins=20menghitung jumlah bacaan per selang nilai dan memperlihatkan bentuk distribusi satu kolom numerik. - Plot sebar dipanggil pada
DataFramedenganx="suhu_c"dany="lembap_pct"untuk membaca hubungan dua kolom numerik.
Referensi#
- Chart visualization — pandas User Guide — dokumentasi resmi seluruh jenis plot bawaan pandas beserta parameternya.
- pandas.DataFrame.plot — pandas API reference
— rincian parameter
kind,xlabel,ylabel, dan penerusan argumen ke matplotlib.