☀️Siang
AI & Data Science

Data Visualization dengan Python

TOKEN

Panduan lengkap membuat visualisasi data yang menarik dan informatif menggunakan matplotlib, seaborn, dan plotly — dari chart sederhana hingga dashboard interaktif

Artikel: Data Visualization Artikel: Data Visualization


1. Pengenalan Data Visualization

Data Visualization atau visualisasi data adalah representasi grafis dari informasi dan data. Dengan menggunakan elemen visual seperti chart, grafik, dan peta, data visualization memudahkan kita memahami tren, outlier, dan pola dalam data yang kompleks.

Python memiliki ekosistem library visualisasi data yang sangat kaya. Tiga library paling populer adalah:

Library Kekuatan Tipe Output Cocok Untuk
MatplotlibLibrary dasar, sangat fleksibelStatic (PNG, SVG, PDF)Plot ilmiah, publikasi, kontrol penuh
SeabornStatistical visualization, tema menarikStatic (berbasis matplotlib)EDA, statistik, heatmap
PlotlyInteraktif, zoom, hover tooltipsInteractive (HTML)Dashboard, web app, presentasi
💡 Kapan Menggunakan Apa?
  • Matplotlib — Saat butuh kontrol penuh atas setiap elemen visual
  • Seaborn — Saat melakukan exploratory data analysis (EDA)
  • Plotly — Saat butuh grafik interaktif untuk dashboard atau web

Instalasi Library

Diagram: Struktur Matplotlib
Struktur Matplotlib

📊 Matplotlib Architecture

📝 User Script

🔧 Backend Layer\n(Agg, GTK, Qt)

🎨 Artist Layer\n(Figure, Axes, Lines)

📋 pyplot API\n(plt.plot, plt.show)

🖼️ Output\n(PNG, SVG, PDF)

Line Chart — Grafik Garis

Diagram

Numerik

Kategorikal

Satu

Banyak

Frekuensi

Perbandingan

Time Series

Hubungan

🎯 Jenis Data?

Satu atau\nBanyak Variable?

Frekuensi atau\nPerbandingan?

📊 Histogram

📈 Scatter Plot

📊 Bar Chart

🥧 Pie Chart

📈 Line Chart

🔥 Heatmap



6. Membuat Dashboard

Dashboard menggabungkan beberapa visualisasi dalam satu tampilan untuk memberikan gambaran komprehensif. Kita akan membuat dashboard menggunakan Plotly Subplots dan Dash.

Dashboard dengan Plotly Subplots

Python — Dashboard Sederhana
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import numpy as np
import pandas as pd

np.random.seed(42)

# Membuat subplot 2x2
fig = make_subplots(
    rows=2, cols=2,
    subplot_titles=(
        'Tren Penjualan',
        'Distribusi Kategori',
        'Top 5 Produk',
        'Target vs Aktual'
    ),
    specs=[
        [{"type": "scatter"}, {"type": "pie"}],
        [{"type": "bar"}, {"type": "bar"}]
    ]
)

# Plot 1: Line chart (tren)
bulan = ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun']
penjualan = [45, 52, 48, 61, 55, 67]
fig.add_trace(
    go.Scatter(x=bulan, y=penjualan, mode='lines+markers',
               name='Penjualan', line=dict(color='#3498db')),
    row=1, col=1
)

# Plot 2: Pie chart (kategori)
kategori = ['Elektronik', 'Fashion', 'Makanan', 'Lainnya']
nilai = [35, 25, 22, 18]
fig.add_trace(
    go.Pie(labels=kategori, values=nilai,
           marker=dict(colors=['#3498db','#e74c3c','#2ecc71','#f1c40f'])),
    row=1, col=2
)

# Plot 3: Bar chart (top produk)
produk = ['Laptop', 'HP', 'Tablet', 'TV', 'Headset']
jml = [120, 95, 78, 65, 52]
fig.add_trace(
    go.Bar(x=produk, y=jml, name='Terjual',
           marker_color='#2ecc71'),
    row=2, col=1
)

# Plot 4: Target vs Aktual
target = [50, 55, 60, 65, 70, 75]
aktual = [45, 52, 58, 61, 68, 72]
fig.add_trace(
    go.Bar(x=bulan, y=target, name='Target',
           marker_color='#bdc3c7'),
    row=2, col=2
)
fig.add_trace(
    go.Bar(x=bulan, y=aktual, name='Aktual',
           marker_color='#e74c3c'),
    row=2, col=2
)

# Update layout
fig.update_layout(
    title_text='Dashboard Penjualan Q1-Q2 2026',
    template='plotly_dark',
    height=700,
    showlegend=True
)

fig.show()
# fig.write_html('dashboard.html')

Membuat Dashboard Web dengan Dash

Python — Dash Dashboard
# pip install dash

import dash
from dash import dcc, html
import plotly.graph_objects as go

app = dash.Dash(__name__)

app.layout = html.Div([
    html.H1('Dashboard Penjualan', style={'textAlign': 'center'}),

    # Dropdown filter
    html.Label('Pilih Periode:'),
    dcc.Dropdown(
        id='periode-dropdown',
        options=[
            {'label': 'Q1 2026', 'value': 'q1'},
            {'label': 'Q2 2026', 'value': 'q2'},
        ],
        value='q1'
    ),

    # Grafik
    dcc.Graph(id='grafik-penjualan'),

    # Statistik cards
    html.Div([
        html.Div([html.H3('Rp 500Jt'), html.P('Total Penjualan')],
                 className='stat-card'),
        html.Div([html.H3('1,250'), html.P('Total Transaksi')],
                 className='stat-card'),
        html.Div([html.H3('Rp 400K'), html.P('Rata-rata per Transaksi')],
                 className='stat-card'),
    ], style={'display': 'flex', 'gap': '20px'})
])

if __name__ == '__main__':
    app.run(debug=True)
    # Buka http://localhost:8050


7. Best Practices Visualisasi Data

Membuat visualisasi yang efektif bukan hanya soal kode — tapi juga soal desain dan komunikasi. Berikut best practices yang harus diikuti:

1. Pilih Chart yang Tepat

Prinsip Penjelasan
Jangan gunakan 3D kecuali perluChart 3D sering menyulitkan pembacaan — 2D lebih akurat
Hindari pie chart untuk 5+ kategoriSulit membandingkan irisan yang mirip — gunakan bar chart
Mulai Y-axis dari 0Mulai dari angka lain bisa menyesatkan persepsi
Gunakan warna bermaknaHijau = positif, merah = negatif. Hindari terlalu banyak warna

2. Konsistensi Warna & Style

Python — Color Palette
import matplotlib.pyplot as plt

# Definisikan color palette konsisten
COLORS = {
    'primary': '#3498db',
    'secondary': '#2ecc71',
    'danger': '#e74c3c',
    'warning': '#f1c40f',
    'info': '#9b59b6',
    'dark': '#2c3e50',
    'light': '#ecf0f1'
}

# Custom style sheet
plt.rcParams.update({
    'figure.figsize': (10, 6),
    'figure.dpi': 100,
    'axes.titlesize': 16,
    'axes.titleweight': 'bold',
    'axes.labelsize': 12,
    'xtick.labelsize': 10,
    'ytick.labelsize': 10,
    'axes.grid': True,
    'grid.alpha': 0.3,
    'font.family': 'sans-serif',
    'axes.spines.top': False,    # Hilangkan border atas
    'axes.spines.right': False,  # Hilangkan border kanan
})

3. Label & Anotasi yang Jelas

  • Sertakan judul yang deskriptif (apa yang ditunjukkan chart)
  • Tambahkan label sumbu dengan unit (Rp, %, kg, dll)
  • Berikan sumber data di bagian bawah chart
  • Gunakan anotasi untuk menyorot data penting
  • Pastikan font cukup besar untuk dibaca (min 10pt)

4. Aksesibilitas

⚠️ Aksesibilitas Visualisasi
  • Jangan hanya mengandalkan warna — gunakan juga pattern/tekstur untuk membedakan data
  • Gunakan color blind-friendly palettes (cividis, viridis, plasma)
  • Alt text untuk gambar chart
  • Pastikan kontras cukup untuk dibaca

5. Tips Performa

Tips Alasan
Gunakan plt.tight_layout()Mencegah label terpotong
Simpan dengan bbox_inches='tight'Output rapi tanpa whitespace berlebih
Gunakan DPI 150 untuk webResolusi cukup tanpa file terlalu besar
Downsample data besar (10K+ points)Scatter plot dengan terlalu banyak titik lambat
Gunakan rasterized=True untuk SVGMengecilkan ukuran file untuk data besar


8. Quiz: Uji Pemahamanmu!

Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang Data Visualization dengan Python:

Pertanyaan 1: Library apa yang paling cocok untuk membuat visualisasi statistik dengan tema menarik dan kode yang singkat?

a) Matplotlib
b) NumPy
c) Seaborn
d) Pandas

Pertanyaan 2: Jenis chart apa yang paling tepat untuk menunjukkan hubungan antara dua variabel numerik?

a) Pie Chart
b) Line Chart
c) Bar Chart
d) Scatter Plot

Pertanyaan 3: Keunggulan utama Plotly dibanding Matplotlib adalah?

a) Lebih cepat memproses data
b) Menghasilkan grafik interaktif (zoom, pan, hover)
c) Gratis, sementara Matplotlib berbayar
d) Tidak memerlukan Python

Pertanyaan 4: Heatmap paling cocok digunakan untuk menampilkan?

a) Tren penjualan dari waktu ke waktu
b) Proporsi komposisi pasar
c) Matriks korelasi antar variabel atau pola dalam data tabel
d) Hubungan linear antara dua variabel

Pertanyaan 5: Best practice saat membuat visualisasi data adalah?

a) Gunakan warna sebanyak mungkin agar menarik
b) Gunakan chart 3D untuk semua visualisasi
c) Mulai Y-axis dari angka terkecil data agar perbedaan terlihat jelas
d) Pilih chart yang tepat, konsisten warna, dan mulai Y-axis dari 0
🔍 Zoom
100%
🎨 Tema