# Python untuk Data Analytics: Matplotlib, Seaborn dan Visualisasi untuk Wawancara Kerja > Kuasai visualisasi data Python dengan Matplotlib dan Seaborn. Tutorial praktis mencakup grafik, styling, subplot, dan pertanyaan wawancara umum untuk posisi data analytics di tahun 2026. - Published: 2026-04-22 - Updated: 2026-04-22 - Author: SharpSkill - Tags: python, matplotlib, seaborn, data-visualization, data-analytics, interview - Reading time: 9 min --- Visualisasi data Python menjadi salah satu keahlian yang paling sering diuji dalam wawancara data analytics. Perekrut mengharapkan kandidat mampu menghasilkan grafik yang bersih dan mudah dibaca dari data mentah — serta menjelaskan pilihan desain mereka dengan percaya diri. Tutorial ini membahas Matplotlib 3.10 dan Seaborn 0.13, dua pustaka yang mendominasi wawancara teknis untuk posisi analis dan data scientist. Setiap contoh kode dapat dijalankan langsung dengan Python 3.12+. > **Tips Wawancara** > > Sebagian besar wawancara data analytics mencakup sesi live coding di mana kandidat harus menghasilkan visualisasi dari dataset dalam waktu kurang dari 15 menit. Pola-pola di bawah ini langsung berkaitan dengan latihan tersebut. ## Menyiapkan Lingkungan Visualisasi Data Python Sebelum menulis kode grafik apa pun, lingkungan pengembangan memerlukan dependensi yang tepat. Virtual environment yang bersih mencegah konflik versi antara Matplotlib, Seaborn, dan fondasi NumPy/Pandas yang digunakan bersama. ```bash # setup.sh python -m venv venv source venv/bin/activate pip install matplotlib==3.10.8 seaborn==0.13.2 pandas numpy ``` Pemeriksaan cepat untuk memastikan semua paket terpasang dengan benar: ```python # verify_install.py import matplotlib import seaborn as sns import pandas as pd print(f"Matplotlib: {matplotlib.__version__}") print(f"Seaborn: {sns.__version__}") print(f"Pandas: {pd.__version__}") ``` Setelah dependensi terkunci, langkah berikutnya berfokus pada dasar-dasar Matplotlib — fondasi untuk setiap grafik Seaborn. ## Dasar-Dasar Matplotlib: Figure, Axes dan API Berorientasi Objek Matplotlib menawarkan dua API: state machine pyplot dan antarmuka berorientasi objek (OO). API OO memberikan kontrol eksplisit atas setiap elemen dan merupakan standar yang diharapkan dalam kode profesional maupun wawancara kerja. ```python # bar_chart_oo.py import matplotlib.pyplot as plt import numpy as np # Sample quarterly revenue data quarters = ["Q1", "Q2", "Q3", "Q4"] revenue = [42_000, 58_000, 51_000, 67_000] # Create figure and axes explicitly fig, ax = plt.subplots(figsize=(8, 5)) # Draw bars with a specific color ax.bar(quarters, revenue, color="#2563eb", width=0.5) # Label axes clearly — interviewers check for this ax.set_xlabel("Quarter") ax.set_ylabel("Revenue (USD)") ax.set_title("Quarterly Revenue — 2025") # Format y-axis with dollar amounts ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"${x:,.0f}")) # Remove top and right spines for a cleaner look ax.spines[["top", "right"]].set_visible(False) plt.tight_layout() plt.savefig("quarterly_revenue.png", dpi=150) plt.show() ``` Detail penting yang diperhatikan pewawancara: pembuatan `fig, ax` secara eksplisit alih-alih menggunakan `plt.plot()`, label sumbu yang mudah dibaca, nilai tick yang terformat, dan penghapusan elemen grafik yang tidak perlu (spines berlebihan). Pilihan-pilihan kecil ini menandakan pola pikir tingkat produksi. ## Membuat Subplot untuk Analisis Perbandingan Wawancara kerja sering kali mengharuskan perbandingan beberapa metrik secara berdampingan. Fungsi `subplots()` menangani hal ini dengan tata letak grid. ```python # subplots_comparison.py import matplotlib.pyplot as plt import numpy as np months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"] users = [1200, 1350, 1500, 1420, 1680, 1820] revenue = [24_000, 27_000, 30_000, 28_400, 33_600, 36_400] # Two side-by-side plots sharing the x-axis fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5), sharey=False) # Left panel: user growth as a line chart ax1.plot(months, users, marker="o", color="#2563eb", linewidth=2) ax1.set_title("Monthly Active Users") ax1.set_ylabel("Users") ax1.spines[["top", "right"]].set_visible(False) # Right panel: revenue as a bar chart ax2.bar(months, revenue, color="#16a34a", width=0.5) ax2.set_title("Monthly Revenue") ax2.set_ylabel("Revenue (USD)") ax2.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"${x:,.0f}")) ax2.spines[["top", "right"]].set_visible(False) fig.suptitle("Product Metrics — H1 2025", fontsize=14, fontweight="bold") plt.tight_layout() plt.savefig("product_metrics.png", dpi=150) plt.show() ``` Penggunaan `sharey=False` memungkinkan setiap panel memiliki skala sendiri — pendapatan dalam dolar dan pengguna sebagai hitungan memiliki besaran yang berbeda. Fungsi `suptitle` menambahkan judul utama di atas kedua subplot. > **Kesalahan Umum dalam Wawancara** > > Kandidat sering menggunakan `plt.plot()` untuk semua kebutuhan visualisasi alih-alih API berorientasi objek. Ketika pewawancara meminta penambahan sumbu y kedua atau penyesuaian subplot tunggal, pendekatan pyplot menjadi tidak memadai. Selalu gunakan `fig, ax = plt.subplots()` sebagai standar. ## Plot Statistik Seaborn: Dari Distribusi hingga Korelasi Seaborn dibangun di atas Matplotlib dan mengkhususkan diri dalam visualisasi statistik. Di mana Matplotlib memerlukan konfigurasi manual, Seaborn menyimpulkan default yang masuk akal dari struktur data. Analisis distribusi — salah satu tugas wawancara yang paling umum — hanya membutuhkan satu pemanggilan fungsi: ```python # distribution_analysis.py import seaborn as sns import matplotlib.pyplot as plt import pandas as pd import numpy as np # Simulate salary data for two departments np.random.seed(42) data = pd.DataFrame({ "salary": np.concatenate([ np.random.normal(75_000, 12_000, 200), # Engineering np.random.normal(65_000, 10_000, 150), # Marketing ]), "department": ["Engineering"] * 200 + ["Marketing"] * 150 }) # KDE plot comparing salary distributions fig, ax = plt.subplots(figsize=(10, 5)) sns.kdeplot( data=data, x="salary", hue="department", # Automatically splits by category fill=True, # Shaded area under the curve alpha=0.4, palette=["#2563eb", "#dc2626"], ax=ax # Attach to our explicit axes ) ax.set_title("Salary Distribution by Department") ax.set_xlabel("Annual Salary (USD)") ax.xaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"${x:,.0f}")) ax.spines[["top", "right"]].set_visible(False) plt.tight_layout() plt.savefig("salary_distribution.png", dpi=150) plt.show() ``` Parameter `hue` membagi data secara otomatis, dan `fill=True` membuat area yang tumpang tindih terlihat jelas. Pola ini — mengelompokkan distribusi berdasarkan kategori — muncul di hampir setiap panel wawancara analytics. ## Heatmap Seaborn untuk Matriks Korelasi Heatmap korelasi mengungkap hubungan antar variabel numerik secara sekilas. Pewawancara menggunakannya untuk menguji apakah kandidat dapat mengidentifikasi multikolinearitas atau menemukan hubungan fitur yang kuat. ```python # correlation_heatmap.py import seaborn as sns import matplotlib.pyplot as plt import pandas as pd import numpy as np # Simulate e-commerce metrics np.random.seed(42) n = 500 page_views = np.random.poisson(15, n) time_on_site = page_views * 2.5 + np.random.normal(0, 5, n) cart_adds = np.random.binomial(page_views, 0.3) purchases = np.random.binomial(cart_adds, 0.4) df = pd.DataFrame({ "page_views": page_views, "time_on_site": time_on_site, "cart_adds": cart_adds, "purchases": purchases }) # Compute Pearson correlation corr_matrix = df.corr() fig, ax = plt.subplots(figsize=(8, 6)) sns.heatmap( corr_matrix, annot=True, # Show correlation values in cells fmt=".2f", # Two decimal places cmap="RdBu_r", # Diverging colormap centered on 0 vmin=-1, vmax=1, # Fixed scale for consistency square=True, # Square cells linewidths=0.5, ax=ax ) ax.set_title("E-commerce Metrics Correlation") plt.tight_layout() plt.savefig("correlation_heatmap.png", dpi=150) plt.show() ``` Colormap divergen `RdBu_r` membuat korelasi positif berwarna biru dan korelasi negatif berwarna merah — sebuah konvensi yang diharapkan pewawancara. Pengaturan `vmin=-1` dan `vmax=1` memastikan skala warna tetap dapat diinterpretasikan terlepas dari rentang data aktual. ## Styling Grafik untuk Presentasi Profesional Output Matplotlib mentah terlihat usang. Beberapa baris konfigurasi dapat mengubah grafik menjadi visual siap presentasi yang menunjukkan perhatian terhadap detail selama wawancara. ```python # professional_styling.py import matplotlib.pyplot as plt import seaborn as sns # Apply Seaborn's built-in theme sns.set_theme( style="whitegrid", # Clean background with grid lines palette="muted", # Professional color palette font_scale=1.1 # Slightly larger text ) # Global Matplotlib overrides plt.rcParams.update({ "figure.facecolor": "white", "axes.facecolor": "white", "font.family": "sans-serif", "axes.titlesize": 14, "axes.labelsize": 12, }) ``` Menerapkan `sns.set_theme()` di bagian atas skrip menyebarkan styling yang konsisten ke setiap grafik berikutnya. Selama wawancara, hal ini menghindari pemborosan waktu untuk pemformatan per-grafik. > **Catatan Versi** > > Seaborn 0.13 telah menghentikan penggunaan `set_style()` dan `set_palette()` sebagai panggilan terpisah. Fungsi `set_theme()` yang terpadu menggantikan keduanya. Jawaban Stack Overflow yang lebih lama masih mereferensikan API yang sudah usang — hindari penggunaannya dalam wawancara 2026. ## Pertanyaan Wawancara Visualisasi Data yang Umum Selain coding, pewawancara juga menguji pemahaman konseptual tentang praktik terbaik visualisasi. Pertanyaan-pertanyaan di bawah ini muncul secara konsisten dalam wawancara data analytics dan data science. **Kapan sebaiknya menggunakan bar chart dibandingkan line chart?** Bar chart menampilkan perbandingan antar kategori diskrit (departemen, jenis produk, wilayah). Line chart menunjukkan tren dalam interval yang kontinu atau berurutan (time series, pengukuran sekuensial). Menggunakan line chart untuk kategori yang tidak berurutan menyiratkan hubungan palsu antara bar yang berdekatan. **Apa yang membuat sebuah grafik menyesatkan?** Sumbu y yang terpotong, dual sumbu y dengan skala berbeda, efek 3D pada data 2D, dan rentang waktu yang dipilih secara selektif — semua hal ini mendistorsi persepsi. Solusinya: mulai sumbu y dari nol untuk bar chart, beri label sumbu secara eksplisit, dan hindari elemen dekoratif yang mengaburkan data. **Bagaimana pemilihan palet warna memengaruhi interpretasi data?** Palet sekuensial (terang-ke-gelap) cocok untuk data terurut seperti suhu atau pendapatan. Palet divergen (dua warna bertemu di pusat netral) menyoroti deviasi dari titik tengah, seperti untung/rugi atau koefisien korelasi. Palet kategorikal menggunakan warna berbeda untuk kelompok yang tidak terkait. Palet ramah buta warna (seperti `colorblind` atau `muted` dari Seaborn) memastikan aksesibilitas — detail yang membedakan kandidat senior. **Jelaskan perbedaan antara `plt.show()` dan `plt.savefig()`.** `plt.show()` merender gambar ke jendela interaktif dan menghapus status gambar setelahnya. `plt.savefig()` menulis gambar ke file tanpa menghapusnya. Memanggil `savefig()` setelah `show()` menghasilkan file kosong — bug yang umum terjadi. Urutan yang benar: `savefig()` terlebih dahulu, kemudian `show()`. ## Menggabungkan Semuanya: Latihan Wawancara End-to-End Latihan take-home atau live coding yang tipikal menggabungkan pemuatan data, pembersihan, dan beberapa jenis grafik. Contoh berikut mencerminkan soal wawancara nyata dari tim analytics. ```python # interview_exercise.py import matplotlib.pyplot as plt import seaborn as sns import pandas as pd import numpy as np sns.set_theme(style="whitegrid", palette="muted", font_scale=1.05) # Simulate 12 months of product data np.random.seed(42) months = pd.date_range("2025-01", periods=12, freq="MS") df = pd.DataFrame({ "month": months, "revenue": np.cumsum(np.random.normal(5000, 2000, 12)) + 50_000, "customers": np.cumsum(np.random.poisson(50, 12)) + 500, "churn_rate": np.clip(np.random.normal(0.05, 0.015, 12), 0.01, 0.12) }) fig, axes = plt.subplots(1, 3, figsize=(18, 5)) # Panel 1: Revenue trend axes[0].plot(df["month"], df["revenue"], marker="o", color="#2563eb") axes[0].set_title("Revenue Trend") axes[0].set_ylabel("Revenue (USD)") axes[0].yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"${x:,.0f}")) axes[0].tick_params(axis="x", rotation=45) axes[0].spines[["top", "right"]].set_visible(False) # Panel 2: Customer growth axes[1].bar(df["month"], df["customers"], color="#16a34a", width=20) axes[1].set_title("Customer Growth") axes[1].set_ylabel("Total Customers") axes[1].tick_params(axis="x", rotation=45) axes[1].spines[["top", "right"]].set_visible(False) # Panel 3: Churn rate with threshold line axes[2].plot(df["month"], df["churn_rate"], marker="s", color="#dc2626") axes[2].axhline(y=0.05, color="gray", linestyle="--", label="Target: 5%") axes[2].set_title("Monthly Churn Rate") axes[2].set_ylabel("Churn Rate") axes[2].yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"{x:.1%}")) axes[2].tick_params(axis="x", rotation=45) axes[2].spines[["top", "right"]].set_visible(False) axes[2].legend() fig.suptitle("Product Dashboard — FY 2025", fontsize=14, fontweight="bold") plt.tight_layout() plt.savefig("interview_dashboard.png", dpi=150) plt.show() ``` Latihan ini mendemonstrasikan tiga jenis grafik dalam tata letak terpadu, pemformatan sumbu yang tepat, garis referensi untuk target churn, dan styling yang konsisten. Ini adalah elemen-elemen yang tepat yang dinilai pewawancara. ## Kesimpulan - API berorientasi objek Matplotlib (`fig, ax = plt.subplots()`) memberikan kontrol penuh dan merupakan standar yang diharapkan dalam lingkungan profesional maupun wawancara - Parameter `hue` Seaborn dan fungsi statistik bawaan (KDE, heatmap) menangani analisis berkelompok dengan kode minimal - Heatmap korelasi dengan colormap divergen dan skala tetap (`vmin=-1, vmax=1`) merupakan elemen pokok wawancara analytics - Selalu panggil `savefig()` sebelum `show()` untuk menghindari file output kosong - Styling yang bersih — spines yang dihapus, label tick terformat, judul eksplisit — menandakan pemikiran berkualitas produksi kepada pewawancara - Berlatihlah membangun dashboard multi-panel di bawah tekanan waktu: sebagian besar sesi live coding mengalokasikan 10-15 menit per tugas visualisasi --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/id/blog/data-analytics/python-matplotlib-seaborn-data-visualization-interview