Grafik kamu masih jelek, dan kamu tahu itu. Sumbu saling bertumpuk, warna default Matplotlib menyilaukan mata, dan satu scatter plot yang layak ditunjukkan ke tim butuh belasan baris kode. Seaborn menutup celah itu. Library ini berdiri di atas Matplotlib, tapi menghapus hampir semua pengaturan yang biasanya bikin kamu ogah bikin grafik. Satu baris fungsi, dan plot statistik yang dulu butuh 20 baris sekarang beres.
Seaborn Itu Apa, dan Kenapa Tidak Cukup Pakai Matplotlib Saja
Seaborn bekerja langsung dengan DataFrame pandas. Kalau kamu sudah biasa membersihkan dan merapikan data pakai pandas, kamu tinggal lempar DataFrame itu ke Seaborn dan plot jadi. Di lapisan bawah, Seaborn tetap memanggil Matplotlib untuk menggambar. Artinya semua yang sudah kamu kuasai soal kustomisasi Matplotlib — plt.title, plt.savefig, plt.subplots — tetap berlaku di sini.
Bedanya, Seaborn punya fungsi tingkat tinggi untuk urusan statistik: histogram dengan kurva KDE, boxplot, violin plot, heatmap korelasi, sampai memecah satu plot jadi grid kecil berdasarkan kategori. Semua itu biasanya satu baris. Kalau kamu cuma butuh grafik garis atau bar yang polos, Matplotlib saja cukup. Begitu datanya punya dimensi kategori dan kamu mau melihat pola di dalamnya, Seaborn jauh lebih cepat.
Instalasi dan Dataset Contoh
Pasang dulu paketnya. Seaborn membawa beberapa dataset bawaan untuk latihan, jadi kamu tidak perlu cari data dari luar.
pip install seaborn matplotlib pandas
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
print(tips.shape) # (244, 7)
print(tips.head())
Dataset tips berisi data tagihan restoran: kolom total_bill, tip, sex, smoker, day, time, dan size. Tujuh kolom, 244 baris — cukup kecil untuk latihan, tapi punya cukup dimensi kategori buat menguji hampir semua plot Seaborn. Kalau load_dataset gagal karena kamu offline, baca saja CSV sendiri lewat pandas dan sisanya sama.
Plot Pertama: Histogram dan Scatter
Mulai dari yang paling dasar. Histogram dengan kurva estimasi kepadatan (KDE) cukup satu fungsi.
sns.histplot(data=tips, x="total_bill", bins=30, kde=True)
plt.title("Distribusi Total Bill")
plt.show()
Parameter data menerima DataFrame, x menentukan kolom, bins mengatur jumlah batang, dan kde=True menambahkan kurva halus di atasnya. Sekarang scatter plot, lengkap dengan pewarnaan berdasarkan kategori.
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="smoker")
plt.title("Tip vs Total Bill")
plt.show()
hue adalah senjata utama Seaborn. Dia memecah titik berdasarkan nilai kolom — di sini perokok vs bukan perokok — dan otomatis memberi warna plus legenda. Tanpa Seaborn kamu harus menulis loop manual untuk tiap kategori.
Plot Kategorikal: Boxplot, Violin, dan Bar
Saat kamu mau membandingkan distribusi antar kategori, tiga fungsi ini paling sering dipakai.
sns.boxplot(data=tips, x="day", y="total_bill", hue="sex")
plt.title("Total Bill per Hari")
plt.show()
sns.violinplot(data=tips, x="day", y="total_bill", hue="time", split=True)
plt.title("Distribusi Total Bill per Hari")
plt.show()
sns.barplot(data=tips, x="day", y="tip")
plt.title("Rata-rata Tip per Hari")
plt.show()
Boxplot menunjukkan median, kuartil, dan outlier. Violin plot mirip boxplot tapi menampilkan bentuk distribusinya — berguna ketika dua kategori punya median sama tapi sebarannya beda. Barplot menampilkan rata-rata beserta interval kepercayaannya. Pilih boxplot untuk ringkas, violin untuk melihat bentuk, bar untuk nilai agregat.
Heatmap Korelasi
Sebelum masuk ke model atau analisis lanjut, kamu biasanya ingin tahu kolom mana yang saling berhubungan. Heatmap korelasi menjawab itu dalam satu gambar.
corr = tips.select_dtypes(include="number").corr()
sns.heatmap(corr, annot=True, cmap="coolwarm", fmt=".2f")
plt.title("Korelasi Antar Kolom Numerik")
plt.show()
select_dtypes menyaring kolom numerik saja — penting karena .corr() akan error kalau ketemu string. annot=True menampilkan angkanya langsung di sel, fmt=".2f" membulatkan ke dua desimal, dan cmap memilih skema warna. Di dataset ini kamu akan lihat korelasi yang lumayan kuat antara total_bill dan tip, yang masuk akal: makin besar tagihan, makin besar tip.
FacetGrid dan relplot: Pecah Plot Berdasarkan Kategori
Kadang satu plot terlalu ramai kalau semua kategori ditumpuk. Seaborn bisa memecahnya jadi grid kecil.
sns.relplot(data=tips, x="total_bill", y="tip", hue="sex", col="time", row="smoker")
plt.show()
relplot adalah relasi plot. col membagi kolom grid berdasarkan waktu makan (Lunch/Dinner), row membagi baris berdasarkan perokok. Hasilnya empat scatter plot terpisah yang masing-masing tetap bisa dibandingkan karena skala sumbunya disamakan. Untuk plot kategorikal, pakai catplot dengan cara yang sama.
sns.catplot(data=tips, x="day", y="total_bill", kind="box", col="smoker")
plt.show()
Tema, Palet, dan Menghapus Elemen yang Tidak Perlu
Grafik yang bagus bukan cuma soal data, tapi juga soal tidak ada elemen yang mengganggu. Seaborn punya tema bawaan dan fungsi untuk merapikan sumbu.
sns.set_theme(style="whitegrid", palette="muted")
sns.boxplot(data=tips, x="day", y="total_bill")
sns.despine(left=True)
plt.show()
set_theme dipanggil sekali di awal dan berlaku untuk semua plot setelahnya. Pilihan style yang umum: darkgrid, whitegrid, dark, white, dan ticks. despine menghapus garis tepi yang tidak perlu — kalau kamu pakai grid, garis kiri dan atas sering cuma noise visual. Panggil set_theme sebelum plot pertama, bukan setelahnya.
Kalau kamu menjalankan kode di skrip biasa atau server tanpa layar, ganti plt.show() dengan plt.savefig("hasil.png", dpi=150). plt.show() tidak berguna di environment headless dan bisa bikin skrip terasa menggantung.
Langkah Berikutnya
Mulai dari sini, coba muat dataset kamu sendiri — baca CSV dengan pandas, bersihkan, lalu plot dengan fungsi yang sama. Kalau kamu butuh grafik yang bisa di-zoom dan di-hover untuk dibagikan ke klien, Plotly adalah langkah alami berikutnya. Seaborn untuk eksplorasi dan laporan statis, Plotly untuk dashboard interaktif. Dua-duanya punya tempat masing-masing di alur kerja kamu.