Peran Seaborn

Kapan meninggalkan plot bawaan pandas dan apa yang Seaborn tambahkan.

Daftar isi

Seaborn adalah pustaka visualisasi statistik yang dibangun di atas matplotlib, dan kehadirannya melengkapi plot bawaan pandas untuk kebutuhan statistik yang lebih spesifik. Plot bawaan pandas memadai untuk eksplorasi cepat, tetapi plot yang menuntut perhitungan internal seperti kuartil per kelompok atau matriks korelasi menjadi lebih ringkas bila ditulis dengan seaborn. Topik ini mempraktikkan dua plot semacam itu pada dataset kontrak, yaitu boxplot distribusi suhu per ruang dan peta panas korelasi suhu terhadap kelembapan, lalu menutupnya dengan penataan detail yang kembali ke matplotlib.

Boxplot distribusi per kelompok#

Boxplot meringkas distribusi satu kolom numerik per kategori menjadi kotak kuartil, dan sns.boxplot menghitung ringkasannya langsung dari data mentah tanpa agregasi pendahuluan. Fungsi ini menerima DataFrame utuh beserta nama kolom untuk sumbu x dan y, sehingga satu panggilan menghasilkan satu kotak untuk setiap ruang. Dengan plot bawaan pandas, kuartil, kumis, dan pencilan harus dihitung sendiri melalui quantile sebelum digambar, sedangkan seaborn 0.13 melakukan semuanya sekaligus.

python Dataset kontrak dan boxplot suhu per ruang
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

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"])
sns.boxplot(data=df, x="ruang", y="suhu_c")
plt.savefig("boxplot-suhu-ruang.svg")
print("tersimpan boxplot-suhu-ruang.svg")
text Keluaran
tersimpan boxplot-suhu-ruang.svg

Setiap kotak pada gambar membawa garis tengah sebagai median, badan kotak sebagai rentang antarkuartil, dan kumis yang memanjang sampai 1.5 kali rentang antarkuartil dari kotaknya. Angka pada gambar itu terbaca langsung dari datanya, yaitu median 23.7 derajat untuk Lab A, 23.8 derajat untuk Lab B, dan 24.05 derajat untuk Ruang Arsip, dengan kotak Ruang Arsip yang paling tinggi posisinya. Titik di luar kumis digambar terpisah sebagai pencilan, dan Lab A mencatat satu pencilan pada 27.2 derajat Celsius. Urutan kotak mengikuti urutan kemunculan kategori pada data, sedangkan parameter order menetapkan urutan lain bila perbandingannya menuntut kestabilan urutan. Label kedua sumbu masih memakai nama kolom ruang dan suhu_c, yang penggantiannya dibahas pada bagian akhir topik ini.

Boxplot dan histogram saling melengkapi untuk pertanyaan yang berbeda. Histogram pada topik Plot Bawaan pandas memperlihatkan bentuk sebaran satu kolom secara utuh, sedangkan boxplot mengorbankan detail bentuk itu demi perbandingan antar kelompok dalam satu gambar. Apabila jumlah kelompoknya bertambah, kotak yang ramping tetap terbaca berdampingan, sementara satu histogram per kelompok harus ditumpuk dan saling menutupi.

Peta panas korelasi dengan anotasi#

Peta panas (heatmap) mewarnai setiap sel matriks menurut nilainya, dan sns.heatmap melengkapinya dengan skala warna serta anotasi angka pada setiap sel. Bahan matriksnya berasal dari df[["suhu_c", "lembap_pct"]].corr(), yaitu korelasi antar kolom yang berukuran dua kali dua. Kolom yang diikutkan dipilih secara eksplisit agar matriksnya tetap kecil dan seluruh selnya bermakna, karena matriks yang memuat semua kolom numerik sekaligus cepat menjadi padat dan sulit dibaca. Menggambar matriks yang sama dengan matplotlib saja membutuhkan imshow, penataan label sumbu, bilah warna, dan penulisan angka secara terpisah, sedangkan seaborn meringkas semuanya dalam satu panggilan.

python Matriks korelasi suhu dan kelembapan dalam peta panas
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

df = pd.read_csv("sensor_log.csv", parse_dates=["waktu"])
korelasi = df[["suhu_c", "lembap_pct"]].corr()
ax = sns.heatmap(korelasi, annot=True)
ax.set_title("Korelasi suhu dan kelembapan")
plt.savefig("korelasi-suhu-lembap.svg")
print("tersimpan korelasi-suhu-lembap.svg")
text Keluaran
tersimpan korelasi-suhu-lembap.svg

Sel diagonalnya bernilai 1 karena setiap kolom berkorelasi sempurna dengan dirinya sendiri, sedangkan sel silangnya bernilai -0.14. Angka itu menegaskan pembacaan plot sebar pada topik Plot Bawaan pandas, yaitu hubungan suhu dan kelembapan yang lemah dengan kecenderungan berlawanan arah. Parameter annot=True menuliskan nilai pada setiap sel sehingga matriks kecil semacam ini terbaca tanpa menebak warnanya. Bila matriksnya memuat lebih banyak kolom, bilah warna di sampingnya menjadi penuntun pembacaan, karena sel bernilai ekstrem tampak lebih dahulu sebelum angkanya diperiksa satu per satu.

Penataan halus kembali ke matplotlib#

Objek yang dikembalikan seaborn maupun .plot pandas adalah objek Axes milik matplotlib, sehingga seluruh penataan lanjutan memakai metode yang sama. Blok peta panas memanggil ax.set_title("Korelasi suhu dan kelembapan") sebelum menyimpan berkasnya, dan judul itulah yang muncul di atas gambar. Penataan yang sama memungkinkan elemen matplotlib digambar di atas plot seaborn, misalnya ax.axhline(26, color="red") pada boxplot untuk menambahkan garis ambang 26 derajat yang melintang seluruh kotaknya. Ukuran kanvas diganti melalui parameter figsize saat plot dibuat, dan ax.set_ylim(21, 28) menyamakan skala sumbu y antar gambar yang hendak diperbandingkan. Label sumbu boxplot yang masih memakai nama kolom dapat diganti dengan ax.set_xlabel("Ruang") dan ax.set_ylabel("Suhu (°C)"), sementara ukuran kanvas, batas sumbu, dan gaya garis diatur melalui objek yang sama pula. Pembagian kerjanya dengan demikian jelas, yaitu seaborn menghitung statistik dan menggambar bentuk dasarnya, sedangkan matplotlib menata detail akhirnya.

Aturan praktis pemilihannya dapat dirangkum dari dua plot di atas. Mulailah dari .plot pandas selama plotnya hanya membutuhkan nilai yang sudah ada, yaitu garis, batang, histogram, dan sebar seperti pada topik Plot Bawaan pandas. Pindahkan pekerjaannya ke seaborn begitu plotnya harus menghitung statistik sendiri terlebih dahulu, misalnya kuartil per kelompok atau korelasi antar kolom. Dengan pembagian ini, keduanya hidup berdampingan dalam satu proyek tanpa saling menggantikan.

Ringkasan#

  • sns.boxplot(data=df, x="ruang", y="suhu_c") menghitung kuartil, kumis, dan pencilan per kelompok secara internal tanpa agregasi pendahuluan.
  • sns.heatmap(df[["suhu_c", "lembap_pct"]].corr(), annot=True) menggambar matriks korelasi beranotasi lengkap dengan bilah warna dalam satu panggilan.
  • Keluaran seaborn dan .plot pandas berupa Axes matplotlib, sehingga set_title dan set_xlabel tetap menjadi cara menata detail akhirnya.

Referensi#