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 |
|---|---|---|---|
| Matplotlib | Library dasar, sangat fleksibel | Static (PNG, SVG, PDF) | Plot ilmiah, publikasi, kontrol penuh |
| Seaborn | Statistical visualization, tema menarik | Static (berbasis matplotlib) | EDA, statistik, heatmap |
| Plotly | Interaktif, zoom, hover tooltips | Interactive (HTML) | Dashboard, web app, presentasi |
- 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
Line Chart — Grafik Garis
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
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
# 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 perlu | Chart 3D sering menyulitkan pembacaan — 2D lebih akurat |
| Hindari pie chart untuk 5+ kategori | Sulit membandingkan irisan yang mirip — gunakan bar chart |
| Mulai Y-axis dari 0 | Mulai dari angka lain bisa menyesatkan persepsi |
| Gunakan warna bermakna | Hijau = positif, merah = negatif. Hindari terlalu banyak warna |
2. Konsistensi Warna & Style
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
- 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 web | Resolusi cukup tanpa file terlalu besar |
| Downsample data besar (10K+ points) | Scatter plot dengan terlalu banyak titik lambat |
Gunakan rasterized=True untuk SVG | Mengecilkan 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: