Modul Data Visualisasi
Modul Data Visualisasi
DATA VISUALISASI
Puji syukur kehadirat Tuhan Yang Maha Esa atas segala rahmat-Nya sehingga modul ajar matakuliah
Data Visualisasi ini bisa tersusun hingga selesai. Penulis berharap semoga modul ini bisa memenuhi
kebutuhan peserta didik mata kuliah Data Visualisasi. Pembahasan modul ini dimulai dengan
menjelaskan tujuan yang akan dicapai pada mata kuliah Data Visualisasi. Penulis sadar masih banyak
kekurangan didalam penyusunan modul ini, karena keterbatasan pengetahuan serta pengalaman. Untuk
itu penulis mengharapkan kritik dan saran yang membangun dari pembaca demi kesempurnaan modul
ini.
Penulis
DAFTAR ISI
Ketika data mengalir ke dalam hidup kita dengan kecepatan yang belum pernah ada
sebelumnya, kemampuan untuk memahami dan menceritakan kisah melalui data menjadi
semakin penting. Matplotlib adalah salah satu alat yang memungkinkan kita untuk
melakukan hal tersebut. Sebelum kita menyelam lebih dalam ke dalam ocean Matplotlib,
mari kita jelajahi mengapa visualisasi data itu penting dan apa sebenarnya Matplotlib itu.
Visualisasi data bukan hanya tentang membuat grafik atau diagram. Itu tentang
mengkomunikasikan informasi. Dengan visualisasi yang efektif, kamu dapat:
● Pemahaman Cepat: Dengan satu pandangan, kamu dapat segera menangkap tren,
korelasi, dan anomali dalam data.
● Menceritakan Kisah: Grafik dan diagram dapat menceritakan kisah yang menarik
dan mendalam tentang data yang kamu miliki. Apakah penjualan menurun? Apakah
ada korelasi antara dua variabel tertentu?
● Membuat Keputusan yang Tepat: Keputusan berbasis data adalah keputusan yang
cerdas. Dengan visualisasi data, kamu dapat memahami informasi yang diperlukan
untuk membuat keputusan dengan lebih baik dan lebih cepat.
● Engagement: Orang lebih cenderung terlibat dengan grafik atau animasi daripada
baris data mentah.
Matplotlib adalah salah satu perpustakaan visualisasi data yang paling populer dan
serbaguna di Python. Dibuat oleh John D. Hunter pada tahun 2003, perpustakaan ini telah
menjadi standar de facto untuk visualisasi data dengan Python, terutama ketika digunakan
bersama dengan perpustakaan lain seperti Pandas.
Tapi, tentu saja, seperti semua alat, Matplotlib memiliki kurva belajar. Jangan khawatir, itu
sebabnya kamu di sini, bukan? Bersama-sama, kita akan menjelajahi semua potensi dan
keajaiban yang ditawarkan oleh Matplotlib.
Jika kamu belum menginstalnya, kamu bisa melakukannya dengan mudah menggunakan
pip, manajer paket Python:
Di terminal:
pip install matplotlib
Di jupyter notebook:
!pip install matplotlib
Setelah instalasi selesai, kita siap untuk memulai. Sepanjang buku ini, kita akan
menggunakan berbagai dataset untuk memahami fitur-fitur Matplotlib dan bagaimana
menggunakannya untuk menceritakan kisah melalui data.
Kamu mungkin bertanya-tanya apa yang akan kita pelajari selanjutnya. Apakah kita akan
langsung memulai dengan membuat plot? Atau mungkin kita akan membahas berbagai
jenis visualisasi? Jawabannya adalah... kamu akan menemukannya sendiri! Setiap bab akan
membawa kamu ke aspek berbeda dari Matplotlib, memandu kamu melalui proses
pembelajaran yang menarik dan interaktif.
Ketika kamu menyelesaikan bab ini, aku berharap kamu telah memahami pentingnya
visualisasi data dan bagaimana Matplotlib dapat membantumu dalam misi ini. Bersiaplah
untuk petualangan yang menarik, penuh dengan warna, bentuk, dan cerita.
Selanjutnya, kita akan memulai dengan berbagai tipe plot dasar yang dapat kamu buat
dengan Matplotlib. Jadi, apakah kamu siap untuk memulai petualangan ini?
MODUL 2: Berbagai Tipe Plot Dasar
2.1. Line Plot
Salah satu jenis visualisasi data yang paling dasar, namun sangat efektif, adalah line plot
(atau sering disebut juga sebagai plot garis). Dalam dunia yang penuh dengan data,
terkadang yang sederhana adalah yang terbaik. Line plot memungkinkan kamu untuk
dengan cepat melihat tren dan pola dalam data berurutan.
df = pd.DataFrame({
'Tanggal': tanggal,
'Harga Saham': harga_saham
})
Output:
Tadaa! Inilah line plot pertama kita. Dengan hanya beberapa baris kode, kamu telah
menciptakan visualisasi yang informatif dan menarik. Tapi tunggu sebentar, Matplotlib
memiliki lebih banyak hal menarik untuk ditawarkan.
Misalnya, bagaimana jika kita ingin garisnya berwarna hijau dengan marker berbentuk
bintang? Mari kita coba!
# Kustomisasi line plot
plt.figure(figsize=(12, 6))
plt.plot(df['Tanggal'], df['Harga Saham'], color='green', marker='*',
linestyle='-', label='Harga Saham')
plt.title('Perubahan Harga Saham Selama Tahun 2022 dengan Kustomisasi')
plt.xlabel('Tanggal')
plt.ylabel('Harga Saham')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
Output:
Keren, bukan? Dengan sedikit sentuhan kustomisasi, kamu telah memberikan nuansa yang
berbeda pada visualisasi data. Kustomisasi memungkinkan kamu untuk menyesuaikan
visualisasi sesuai dengan narasi atau tema yang ingin kamu sampaikan.
Misalnya, selain harga saham, mari kita tambahkan data sintetis tentang harga obligasi dan
lihat bagaimana kedua harga tersebut berubah dari waktu ke waktu.
# Menambahkan data sintetis harga obligasi
harga_obligasi = np.random.randn(len(tanggal)).cumsum() + 70 # Random
walk
df['Harga Obligasi'] = harga_obligasi
Output:
Perhatikan bagaimana kita dengan mudah menambahkan garis kedua ke plot kita dengan
memanggil fungsi plot() lagi. Dengan menggunakan legenda, kita dapat dengan mudah
memberi tahu pembaca apa arti dari setiap garis.
Output:
Dengan menentukan batas sumbu x, kita dapat dengan mudah memfokuskan pada periode
waktu tertentu. Fitur ini sangat berguna saat kamu ingin menyoroti peristiwa atau anomali
tertentu dalam data.
Output:
Dengan menambahkan garis tren berdasarkan rata-rata bergerak, kamu dapat dengan cepat
melihat bagaimana harga saham berfluktuasi sekitar tren jangka menengah. Garis oranye
memberikan gambaran umum tentang ke mana arah harga saham bergerak.
Output:
Dengan mengisi area di bawah garis rata-rata bergerak, kita menambahkan dimensi visual
lain ke plot kita. Area berwarna oranye muda menyoroti pentingnya tren yang ditunjukkan
oleh rata-rata bergerak.
plt.tight_layout()
plt.show()
Output:
Mari kita mulai dengan membuat data sintetis untuk skenario ini.
# Membuat data sintetis untuk penjualan produk
bulan = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"]
penjualan_produk_A = np.random.randint(50, 200, 12) * 100
penjualan_produk_B = np.random.randint(50, 200, 12) * 100
df_penjualan = pd.DataFrame({
'Bulan': bulan,
'Produk A': penjualan_produk_A,
'Produk B': penjualan_produk_B
})
df_penjualan
Output:
Kami telah menyiapkan data sintetis yang menunjukkan penjualan bulanan dari Produk A
dan Produk B. Sekarang, mari kita visualisasikan data ini dengan line plot untuk
membandingkan penjualan kedua produk tersebut.
Output:
Grafik di atas menunjukkan perbandingan penjualan bulanan antara Produk A dan Produk
B. Kamu dapat dengan mudah melihat bagaimana penjualan dari masing-masing produk
berfluktuasi dari bulan ke bulan. Dengan marker dan gaya garis yang berbeda, kita dapat
dengan jelas membedakan antara dua produk tersebut.
# Menambahkan anotasi
plt.annotate(f'Peak Produk A: {bulan_peak_A}',
xy=(bulan_peak_A, nilai_peak_A),
xytext=(bulan_peak_A, nilai_peak_A + 2000),
arrowprops=dict(facecolor='black', arrowstyle='->'),
fontsize=9)
plt.annotate(f'Peak Produk B: {bulan_peak_B}',
xy=(bulan_peak_B, nilai_peak_B),
xytext=(bulan_peak_B, nilai_peak_B - 4000),
arrowprops=dict(facecolor='black', arrowstyle='->'),
fontsize=9)
Output:
Dengan menambahkan anotasi, kita telah memberikan informasi tambahan tentang bulan
di mana masing-masing produk mencapai penjualan tertingginya. Anotasi ini
menambahkan konteks dan membuat grafik menjadi lebih informatif.
Output:
Dengan menambahkan garis horizontal, kita sekarang dapat dengan mudah melihat
bagaimana penjualan bulanan dari masing-masing produk dibandingkan dengan rata-rata
penjualannya selama setahun. Garis putus-putus memberikan referensi visual yang
memungkinkan kita untuk melihat di mana bulan tertentu berada di atas atau di bawah
rata-rata.
2.2. Scatter Plot
Mengapa Scatter Plot?
Bayangkan kamu memiliki dua set data dan ingin mengetahui apakah ada hubungan antara
keduanya. Bagaimana cara terbaik untuk melihatnya? Ya, dengan scatter plot!
Scatter plot memungkinkan kita untuk memvisualisasikan dua variabel sebagai titik-titik
dalam koordinat kartesius. Dengan demikian, kita dapat dengan cepat melihat distribusi
dan hubungan antara variabel-variabel tersebut.
df_usia_penghasilan = pd.DataFrame({
'Usia': usia,
'Penghasilan': penghasilan
})
Output:
Dari scatter plot di atas, kita dapat melihat hubungan antara usia dan penghasilan.
Sepertinya ada kecenderungan untuk penghasilan meningkat seiring dengan bertambahnya
usia.
plt.figure(figsize=(10, 6))
plt.scatter(df_usia_penghasilan['Usia'],
df_usia_penghasilan['Penghasilan'], color='cyan', alpha=0.6, s=sizes,
edgecolors='black')
plt.title('Hubungan Antara Usia dan Penghasilan dengan Ukuran Titik
Berdasarkan Penghasilan')
plt.xlabel('Usia')
plt.ylabel('Penghasilan')
plt.grid(True, which='both', linestyle='--', linewidth=0.5)
plt.tight_layout()
plt.show()
Output:
Dengan mengubah ukuran titik berdasarkan penghasilan, kita sekarang memiliki dimensi
tambahan dalam visualisasi kita. Titik yang lebih besar menunjukkan penghasilan yang
lebih tinggi, memberikan gambaran lebih jelas tentang distribusi penghasilan dalam
kelompok usia tertentu.
Mari kita tambahkan kolom 'Jenis Kelamin' ke data kita dan visualisasikan dengan scatter
plot.
# Menambahkan data sintetis untuk jenis kelamin
jenis_kelamin = np.random.choice(['Laki-laki', 'Perempuan'], 100)
df_usia_penghasilan['Jenis Kelamin'] = jenis_kelamin
plt.figure(figsize=(10, 6))
scatter = plt.scatter(df_usia_penghasilan['Usia'],
df_usia_penghasilan['Penghasilan'], c=colors, alpha=0.6, s=sizes,
edgecolors='black', label=colors)
plt.title('Hubungan Antara Usia dan Penghasilan dengan Kategori Jenis
Kelamin')
plt.xlabel('Usia')
plt.ylabel('Penghasilan')
# Legenda
handles, labels = scatter.legend_elements(prop="colors")
plt.legend(handles, ['Laki-laki', 'Perempuan'])
Output:
Dengan menambahkan warna berdasarkan jenis kelamin, kita sekarang dapat melihat
distribusi gender dalam data serta hubungan antara usia dan penghasilan. Warna biru
mewakili laki-laki, sedangkan magenta mewakili perempuan.
df_iklan = pd.DataFrame({
'Klik': klik,
'Konversi': konversi
})
df_iklan.head()
Output:
Output:
Dari scatter plot di atas, kita dapat melihat hubungan yang positif antara jumlah klik dan
konversi. Namun, ada beberapa variasi, yang mungkin disebabkan oleh faktor-faktor lain
seperti kualitas iklan, waktu tayang, atau audiens target.
plt.figure(figsize=(10, 6))
scatter = plt.scatter(df_iklan['Klik'], df_iklan['Konversi'], c='blue',
alpha=0.6, s=sizes, edgecolors='white', linewidth=0.5)
plt.title('Hubungan Antara Klik dan Konversi dengan Ukuran Berdasarkan
Biaya')
plt.xlabel('Klik')
plt.ylabel('Konversi')
# Menambahkan colorbar untuk ukuran
cbar = plt.colorbar(scatter)
cbar.set_label('Biaya Iklan')
Output:
Dengan menyesuaikan ukuran titik berdasarkan biaya iklan, kita sekarang dapat melihat
seberapa banyak biaya yang dikeluarkan untuk setiap kampanye iklan. Titik-titik yang lebih
besar menunjukkan biaya yang lebih tinggi.
plt.figure(figsize=(10, 6))
scatter = plt.scatter(df_iklan['Klik'], df_iklan['Konversi'], c=colors,
alpha=0.6, s=sizes, edgecolors='white', linewidth=0.5, cmap='viridis')
plt.title('Hubungan Antara Klik dan Konversi dengan Warna Berdasarkan
Durasi')
plt.xlabel('Klik')
plt.ylabel('Konversi')
Output:
Dengan mengatur warna titik berdasarkan durasi iklan, kita sekarang dapat melihat
seberapa lama setiap kampanye iklan berlangsung. Palet warna "viridis" memberikan
representasi visual yang jelas dari durasi iklan, dengan warna yang lebih terang
menunjukkan durasi yang lebih pendek, dan warna yang lebih gelap menunjukkan durasi
yang lebih panjang.
2.3. Histogram
Apakah kamu pernah bertanya-tanya tentang distribusi data dalam suatu dataset? Atau
bagaimana frekuensi dari suatu kisaran nilai dalam data? Jawabannya ada di histogram!
Histogram adalah alat visualisasi dasar yang memberikan gambaran tentang distribusi data.
Ia menunjukkan seberapa sering suatu nilai (atau kisaran nilai) muncul dalam dataset.
Meskipun histogram mungkin terlihat seperti bar chart, ada perbedaan mendasar antara
keduanya. Dalam histogram, data dikelompokkan ke dalam bin atau interval dan tinggi
batang menunjukkan berapa banyak data poin yang ada dalam bin tersebut.
Kita akan memulai dengan membuat dataset sintetis yang merepresentasikan umur
pelanggan.
# Membuat data sintetis untuk umur pelanggan
np.random.seed(42)
umur_pelanggan = np.random.randint(15, 75, 1000) # Umur antara 15
hingga 75 tahun
Output:
Dari histogram di atas, kita dapat melihat distribusi umur pelanggan yang berbelanja di toko
kita. Batang-batang vertikal menunjukkan rentang usia (misalnya, 15-20 tahun, 20-25 tahun,
dan seterusnya), sementara tinggi batang menunjukkan jumlah pelanggan dalam rentang
usia tersebut.
Sejauh ini, terlihat bahwa sebagian besar pelanggan berusia antara 25 hingga 40 tahun.
Namun, ada juga sejumlah pelanggan yang berusia lebih tua, hingga 75 tahun.
Mari kita coba beberapa pengaturan bin yang berbeda untuk melihat bagaimana mereka
mempengaruhi tampilan histogram.
# Membuat beberapa histogram dengan jumlah bin yang berbeda
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(14, 10))
bins_values = [6, 12, 24, 50]
plt.tight_layout()
plt.show()
Output:
Dari keempat histogram di atas, kita dapat melihat bagaimana pemilihan bin
mempengaruhi tampilan distribusi:
● Bin = 6: Dengan hanya 6 bin, kita mendapatkan gambaran kasar tentang distribusi.
Namun, detail yang lebih halus dari data mungkin hilang.
● Bin = 12: Ini memberikan keseimbangan antara detail dan interpretasi. Di sini, kita
dapat melihat beberapa puncak dan lekukan yang lebih jelas dalam distribusi.
● Bin = 24: Dengan 24 bin, kita mendapatkan lebih banyak detail. Namun, dengan
banyaknya bin, histogram mungkin mulai terlihat sedikit berantakan.
● Bin = 50: Di sini, setiap bin mungkin hanya mewakili beberapa tahun. Meskipun kita
mendapatkan gambaran yang sangat detail, ini mungkin terlalu detail untuk
interpretasi yang mudah.
Pemilihan jumlah bin yang tepat tergantung pada ukuran dataset dan tujuan analisis. Dalam
banyak kasus, kamu mungkin perlu bereksperimen dengan beberapa nilai untuk
menemukan yang paling sesuai.
2.3.3. Kustomisasi Histogram
Selain menyesuaikan jumlah bin, ada banyak cara lain untuk menyesuaikan histogram agar
sesuai dengan kebutuhan kamu. Mari kita coba beberapa kustomisasi lanjutan!
# Kustomisasi histogram dengan orientasi horizontal, kumulatif, dan normalisasi
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(14, 10))
# Histogram kumulatif
axes[0, 1].hist(df_umur['Umur'], bins=12, color='skyblue', edgecolor='black', alpha=0.7,
cumulative=True)
axes[0, 1].set_title('Histogram Kumulatif') axes[0,
1].set_xlabel('Umur')
axes[0, 1].set_ylabel('Jumlah Kumulatif Pelanggan')
# Histogram dengan beberapa dataset (misalnya menambahkan data umur pelanggan dari toko lain)
umur_pelanggan_toko_lain = np.random.randint(15, 75, 1000)
axes[1, 1].hist([df_umur['Umur'], umur_pelanggan_toko_lain], bins=12, color=['skyblue',
'lightgreen'], edgecolor='black', alpha=0.7, label=['Toko A', 'Toko B'])
axes[1, 1].set_title('Histogram dengan Beberapa Dataset') axes[1,
1].set_xlabel('Umur')
axes[1, 1].set_ylabel('Jumlah Pelanggan') axes[1, 1].legend()
for ax in axes.ravel():
ax.grid(True, which='both', linestyle='--', linewidth=0.5) plt.tight_layout()
plt.show()
Output:
df_penjualan = pd.DataFrame({
'Genre': genres,
'Penjualan': penjualan
})
Output:
Dari grafik batang di atas, kita mendapatkan gambaran jelas tentang penjualan buku
berdasarkan genre. Fiksi tampaknya menjadi genre yang paling populer, diikuti oleh
Non-Fiksi dan Komik. Horor, Romansa, dan Biografi memiliki penjualan yang lebih rendah
dibandingkan genre lainnya.
Output:
Grafik batang horizontal memberikan perspektif yang berbeda dari data yang sama. Dengan
format ini, label kategori mungkin lebih mudah dibaca, terutama jika ada banyak kategori
atau nama kategori yang panjang.
Mari kita tambahkan data sintetis untuk skenario tersebut dan visualisasikan dengan
Stacked Bar Chart.
# Menambahkan data sintetis untuk penjualan online dan offline
df_penjualan['Online'] = df_penjualan['Penjualan'] *
np.random.uniform(0.4, 0.7, len(df_penjualan))
df_penjualan['Offline'] = df_penjualan['Penjualan'] -
df_penjualan['Online']
Output:
Dari Stacked Bar Chart di atas, kita dapat memahami dua dimensi sekaligus:
Total Penjualan untuk Setiap Genre: Ini diwakili oleh tinggi total dari setiap batang.
Pembagian Penjualan Online dan Offline: Bagian biru mewakili penjualan online,
sementara bagian merah mewakili penjualan offline.
Dengan grafik ini, kita dapat dengan mudah melihat bahwa sebagian besar penjualan untuk
genre buku tertentu berasal dari saluran online, sementara beberapa lainnya memiliki
distribusi yang hampir sama antara online dan offline.
Pie Chart adalah representasi grafis yang menampilkan data dalam bentuk
potongan-potongan lingkaran. Setiap potongan lingkaran (atau "slice") mewakili kategori
tertentu dan ukurannya proporsional dengan jumlah yang diwakilinya dari keseluruhan.
Keuntungan:
● Intuitif: Mudah dipahami dan diinterpretasikan. Pembaca dapat dengan cepat
memahami proporsi relatif antara kategori.
● Visual: Dengan penggunaan warna dan potongan, grafik ini dapat menarik dan
informatif.
Kekurangan:
● Keterbatasan Kategori: Jika ada terlalu banyak kategori, Pie Chart dapat terlihat
berantakan dan sulit dibaca.
● Perbandingan Kesulitan: Sulit membandingkan potongan yang berdekatan dalam
ukuran, terutama jika perbedaannya kecil.
● Kasus Dasar: Distribusi Genre Buku
Bayangkan kamu memiliki toko buku dan ingin mengetahui proporsi genre buku yang
kamu jual. Pie Chart dapat memberikan gambaran visual yang cepat tentang distribusi
genre buku. Mari kita gunakan data penjualan buku yang sebelumnya telah kita buat.
# Membuat Pie Chart untuk distribusi genre buku berdasarkan penjualan
plt.figure(figsize=(10, 7))
plt.pie(df_penjualan['Penjualan'], labels=df_penjualan['Genre'],
autopct='%1.1f%%', startangle=140, colors=plt.cm.Paired.colors)
plt.title('Distribusi Genre Buku Berdasarkan Penjualan')
plt.show()
Output:
Dari Pie Chart di atas, kamu dapat melihat distribusi penjualan buku berdasarkan genre.
Setiap potongan lingkaran mewakili suatu genre, dan ukurannya menunjukkan proporsi
penjualannya dalam total penjualan buku. Label dan persentase di setiap potongan
membantu kamu memahami proporsi relatif genre tersebut.
Namun, Pie Chart ini adalah contoh dasar. Mari kita jelajahi lebih lanjut bagaimana kita bisa
memperkaya dan meningkatkan kejelasan Pie Chart kita.
plt.figure(figsize=(10, 7))
plt.pie(df_penjualan['Penjualan'], labels=df_penjualan['Genre'],
autopct='%1.1f%%', startangle=140, explode=explode,
colors=plt.cm.Paired.colors)
plt.title('Distribusi Genre Buku dengan Potongan Eksplodir')
plt.show()
Output:
Kedua potongan "Komik" dan "Romansa" kini menonjol dari Pie Chart, memberi penekanan
visual pada genre-genre tersebut. Teknik ini bisa sangat berguna ketika kamu ingin
menyoroti informasi tertentu atau memberikan konteks tambahan kepada pembaca.
Mari kita coba kedua kustomisasi ini pada Pie Chart kita.
plt.figure(figsize=(10, 7))
plt.pie(df_penjualan['Penjualan'], labels=df_penjualan['Genre'],
autopct='%1.1f%%', startangle=90, explode=explode,
colors=plt.cm.Paired.colors,shadow=True)
plt.title('Distribusi Genre Buku dengan Bayangan dan Sudut Mulai
Berbeda')
plt.show()
Output:
Dengan menambahkan bayangan dan mengubah sudut mulai, Pie Chart kita kini memiliki
tampilan yang sedikit berbeda. Bayangan memberikan kesan kedalaman, sementara
mengubah start angle memastikan Pie Chart dimulai dari atas dan berputar searah jarum
jam, memberikan tata letak yang mungkin lebih familiar bagi beberapa pembaca.
Mari kita coba mengubah Pie Chart kita menjadi Donut Chart.
plt.figure(figsize=(10, 7))
plt.pie(df_penjualan['Penjualan'], labels=df_penjualan['Genre'],
autopct='%1.1f%%', startangle=90, explode=explode,
colors=plt.cm.Paired.colors, wedgeprops=dict(width=0.3))
plt.gca().add_artist(plt.Circle((0,0),0.70,fc='white'))
plt.title('Distribusi Genre Buku dengan Format Donut Chart')
plt.show()
Output:
Kini Pie Chart kita telah bertransformasi menjadi Donut Chart. Dengan lubang di tengah,
kita memiliki ruang tambahan yang dapat digunakan untuk teks, gambar, atau informasi
tambahan lainnya. Dalam contoh ini, kita sengaja meninggalkan ruang tersebut kosong,
namun dalam aplikasi nyata, itu bisa menjadi tempat yang berguna untuk judul, total data,
atau informasi penting lainnya.
plt.figure(figsize=(10, 7))
plt.pie(df_penjualan['Penjualan'], labels=labels_dengan_info,
startangle=90, explode=explode, colors=plt.cm.Paired.colors,
wedgeprops=dict(width=0.3))
plt.gca().add_artist(plt.Circle((0,0),0.70,fc='white'))
plt.title('Distribusi Genre Buku dengan Label Informasi Tambahan')
plt.show()
Output:
Dengan menambahkan informasi jumlah buku dan persentasenya pada setiap label,
pembaca sekarang memiliki gambaran yang lebih lengkap tentang distribusi penjualan
buku. Hal ini memungkinkan pembaca untuk mendapatkan detail yang lebih mendalam
hanya dengan melihat Pie Chart, tanpa perlu merujuk ke tabel atau sumber data lainnya.
2.6. Area Plot
Bayangkan kamu sedang berdiri di tepi bukit yang luas, menatap ke arah horizon. Lalu,
kamu melihat guratan-guratan yang menandakan ketinggian dan kedalaman dari setiap
bagian bukit tersebut. Area Plot, atau yang sering dikenal sebagai Area Chart, memberikan
visualisasi yang serupa dengan guratan-guratan tersebut, di mana area di bawah garis diisi
dengan warna atau pola tertentu.
df_penjualan_buku = pd.DataFrame({
'Bulan': bulan,
'Penjualan': penjualan
})
df_penjualan_buku
Output:
Dari data di atas, kita memiliki informasi mengenai penjualan buku untuk setiap bulan
selama satu tahun. Mari kita visualisasikan data ini dengan Area Plot sederhana untuk
memahami tren penjualan buku sepanjang tahun.
plt.figure(figsize=(12, 6))
plt.fill_between(df_penjualan_buku['Bulan'],
df_penjualan_buku['Penjualan'], color='skyblue', alpha=0.4)
plt.plot(df_penjualan_buku['Bulan'], df_penjualan_buku['Penjualan'],
color='blue', marker='o')
plt.title('Penjualan Buku Sepanjang Tahun')
plt.xlabel('Bulan')
plt.ylabel('Jumlah Penjualan')
plt.grid(True, axis='y', linestyle='--', linewidth=0.7, alpha=0.7)
plt.show()
Output:
Voila! Area Plot di atas menunjukkan visualisasi penjualan buku dari bulan Januari hingga
Desember. Area yang diisi warna biru muda menandakan volume penjualan, sementara
garis biru menunjukkan tren penjualan. Melalui visualisasi ini, kamu dapat dengan cepat
melihat bahwa ada peningkatan penjualan signifikan di bulan Maret dan Juli, serta
penurunan di bulan Agustus.
Mari kita ciptakan data sintetis untuk penjualan buku berdasarkan genre dan visualisasikan
dengan Stacked Area Plot.
# Membuat data sintetis untuk genre buku
penjualan_fiksi = np.random.randint(100, 500, 12).tolist()
penjualan_non_fiksi = np.random.randint(50, 300, 12).tolist()
penjualan_komik = np.random.randint(10, 150, 12).tolist()
df_penjualan_genre = pd.DataFrame({
'Bulan': bulan,
'Fiksi': penjualan_fiksi,
'Non-Fiksi': penjualan_non_fiksi,
'Komik': penjualan_komik
})
df_penjualan_genre
Output:
Kini kita memiliki data penjualan buku untuk tiga genre berbeda sepanjang tahun. Mari kita
visualisasikan data tersebut dengan Stacked Area Plot untuk melihat kontribusi
masing-masing genre terhadap total penjualan setiap bulannya.
plt.figure(figsize=(12, 6))
Output:
Dari Stacked Area Plot di atas, kamu dapat melihat bagaimana setiap genre buku
berkontribusi terhadap penjualan total setiap bulannya. Sebagai contoh, buku bergenre
Fiksi memiliki penjualan yang paling tinggi di sebagian besar bulan, diikuti oleh Non-Fiksi
dan Komik.
Warna yang berbeda memungkinkan kamu untuk dengan cepat membedakan antara genre,
dan area yang bertumpuk menunjukkan bagaimana komposisi penjualan berubah dari
bulan ke bulan.
Mari kita lihat bagaimana menambahkan transparansi pada Area Plot kita.
plt.figure(figsize=(12, 6))
Output:
Sebagai contoh, bayangkan kamu memiliki data perubahan stok buku di gudang setiap
bulan. Nilai positif menunjukkan penambahan stok, sementara nilai negatif menunjukkan
pengurangan stok. Mari kita ciptakan data sintetis untuk skenario ini.
# Membuat data sintetis untuk perubahan stok buku
perubahan_stok = np.random.randint(-200, 200, 12).tolist()
df_perubahan_stok = pd.DataFrame({
'Bulan': bulan,
'Perubahan': perubahan_stok
})
df_perubahan_stok
Output:
Kita memiliki data perubahan stok buku untuk setiap bulan. Seperti yang bisa kamu lihat,
ada bulan-bulan di mana stok buku bertambah (nilai positif) dan ada juga bulan di mana
stok berkurang (nilai negatif).
Mari kita visualisasikan data ini dengan Area Plot yang memiliki basis negatif. Ini akan
memberikan gambaran visual tentang kapan toko menambah atau mengurangi stok buku
mereka.
plt.figure(figsize=(12, 6))
plt.fill_between(df_perubahan_stok['Bulan'],
df_perubahan_stok['Perubahan'], color='skyblue',
where=(df_perubahan_stok['Perubahan'] > 0), interpolate=True, alpha=0.4,
label="Penambahan Stok")
plt.fill_between(df_perubahan_stok['Bulan'],
df_perubahan_stok['Perubahan'], color='salmon',
where=(df_perubahan_stok['Perubahan'] < 0), interpolate=True, alpha=0.4,
label="Pengurangan Stok")
plt.plot(df_perubahan_stok['Bulan'], df_perubahan_stok['Perubahan'],
color='blue', marker='o')
Dalam Area Plot di atas, area berwarna biru muda menunjukkan bulan-bulan dengan
penambahan stok, sedangkan area berwarna merah muda menunjukkan bulan-bulan
dengan pengurangan stok. Dengan memvisualisasikan data dengan cara ini, kamu dengan
cepat dapat mengidentifikasi tren dan pola dalam manajemen stok.
2.7. Box Plot
Seiring dengan berkembangnya era data, kebutuhan untuk memahami distribusi dan variasi
data menjadi semakin penting. Salah satu alat yang paling berguna untuk memahami
distribusi data adalah Box Plot ( juga dikenal sebagai whisker plot). Box Plot memberikan
ringkasan grafis dari satu atau beberapa kelompok data. Plot ini bisa memberikan banyak
informasi tentang distribusi, kecenderungan sentral, variabilitas, dan bentuk data.
Apa sih yang membuat Box Plot begitu spesial? Mari kita selami lebih dalam.
Mari kita mulai dengan membuat data sintetis dan menggambarkan Box Plot sederhana
untuk memahami bagaimana komponen-komponen ini ditampilkan.
# Membuat data sintetis untuk skor ujian
np.random.seed(0)
skor_murid_A = np.random.randint(60, 90, 30)
skor_murid_B = np.random.randint(55, 95, 30)
df_skor = pd.DataFrame({
'Murid_A': skor_murid_A,
'Murid_B': skor_murid_B
})
Dalam Box Plot di atas, kita dapat melihat distribusi skor ujian untuk dua kelompok murid:
Murid A dan Murid B. Dari plot ini, kita dapat menarik beberapa kesimpulan:
● Kotak: Bagian tengah dari box plot ini menunjukkan kuartil pertama (Q1) dan kuartil
ketiga (Q3) dari data. Lebarnya kotak ini (dalam hal ini, dari kiri ke kanan)
menunjukkan jangkauan antarkuartil (IQR) dari data.
● Garis Tengah di Kotak: Garis ini menunjukkan median (Q2) dari data, yang mewakili
titik tengah dataset.
● Whiskers: Garis-garis yang keluar dari kotak. Dalam plot ini, whiskers dihitung
sebagai 1.5 * IQR. Semua data di luar whiskers ini dianggap sebagai pencilan dan
ditandai dengan titik.
● Pencilan: Dalam plot ini, tidak ada pencilan yang terlihat, tetapi jika ada, mereka
akan ditandai dengan titik di luar whiskers.
Dengan sekilas pandang, kamu sudah bisa memahami distribusi data, mengetahui mana
yang memiliki variasi lebih besar, dan menilai apakah ada pencilan atau tidak. Namun,
keajaiban Box Plot tidak berhenti di sini. Plot ini juga memungkinkan kamu untuk
membandingkan distribusi dari beberapa kelompok data secara bersamaan, seperti yang
kita lihat dengan Murid A dan Murid B.
Kustomisasi dan Interpretasi
Box Plot, meskipun sederhana, memberikan banyak informasi. Namun, untuk
memaksimalkan kegunaannya, penting untuk mengetahui cara mengkustomisasi dan
menginterpretasikannya dengan benar.
# Mengkustomisasi warna
for patch, color in zip(bp['boxes'], colors):
patch.set_facecolor(color)
Output:
Dengan sedikit kustomisasi warna, Box Plot kita kini tampak lebih menarik dan informatif.
Murid A diwakili dengan warna biru muda, sementara Murid B dengan warna merah muda.
plt.figure(figsize=(12, 7))
Dalam visualisasi di atas, swarmplot memungkinkan kita untuk melihat setiap titik data
individu. Titik-titik hitam menunjukkan lokasi setiap skor ujian individu. Dengan kombinasi
box plot dan swarmplot, kita mendapatkan gambaran yang lebih lengkap tentang distribusi
data.
Mari kita coba membuat data dengan beberapa pencilan dan visualisasikan dengan Box
Plot.
# Membuat data dengan pencilan
np.random.seed(42)
skor_murid_C = np.random.randint(60, 90, 28).tolist() + [105, 110] #
Menambahkan dua pencilan
df_skor['Murid_C'] = skor_murid_C
Output:
Pada visualisasi di atas, kamu dapat dengan jelas melihat dua pencilan (titik-titik yang
berada di sebelah kanan whisker). Skor 105 dan 110 jauh dari skor murid lainnya, yang
berkisar antara 60 hingga 90. Dengan Box Plot, identifikasi pencilan menjadi sangat
sederhana.
Mari kita coba memvisualisasikan skor ujian dari tiga kelas berbeda menggunakan Box Plot.
# Menggambar Box Plot untuk membandingkan tiga kelompok murid
plt.figure(figsize=(12, 7))
Output:
Dari Box Plot di atas, kita bisa mendapatkan wawasan berharga mengenai distribusi skor
ujian dari tiga kelompok murid:
● Kelas A (Murid A) cenderung memiliki median skor yang lebih tinggi dibandingkan
dengan kelas lainnya, tetapi juga memiliki variasi yang lebih luas.
● Kelas B (Murid B) memiliki median skor yang lebih rendah daripada Kelas A namun
lebih tinggi daripada Kelas C, dan variasinya juga lebih sempit.
● Kelas C (Murid C) memiliki median skor yang paling rendah, dengan dua pencilan
yang jauh lebih tinggi dari skor murid lainnya di kelas tersebut.
Dengan informasi ini, seorang pendidik mungkin dapat menilai kelas mana yang
memerlukan perhatian lebih atau bahkan mengidentifikasi apakah ada murid tertentu yang
memerlukan bimbingan lebih lanjut.
Mari kita coba mengkustomisasi panjang whiskers pada Box Plot kita.
# Menggambar Box Plot dengan whiskers yang dikustomisasi untuk mencakup
semua data
plt.figure(figsize=(12, 7))
Output:
Dengan mengkustomisasi panjang whiskers, Box Plot kita sekarang mencakup semua data,
termasuk yang sebelumnya dianggap sebagai pencilan. Dalam kasus ini, whiskers
diperpanjang untuk mencakup seluruh rentang data dari 0% hingga 100%.
Ini sangat berguna jika kamu ingin menekankan keseluruhan distribusi data tanpa
memberi label khusus pada data tertentu sebagai pencilan. Namun, penting untuk diingat
bahwa memodifikasi whiskers dapat mengubah interpretasi plot, jadi selalu pastikan untuk
menjelaskan kustomisasi apa pun yang kamu lakukan saat mempresentasikan atau
menganalisis data.
Mari kita ciptakan contoh dengan data sintetis untuk memvisualisasikan hal ini.
# Membuat data sintetis untuk penjualan di beberapa toko
np.random.seed(42)
toko_A = np.random.randint(50, 150, 100)
toko_B = np.random.randint(60, 180, 100)
toko_C = np.random.randint(40, 170, 90).tolist() + [200, 210, 220, 230,
240, 250, 260, 270, 280, 290] # Menambahkan beberapa pencilan
df_penjualan = pd.DataFrame({
'Toko': ['A']*100 + ['B']*100 + ['C']*100,
'Penjualan': toko_A.tolist() + toko_B.tolist() + toko_C
})
Output:
Dari Box Plot di atas, kita dapat memahami berbagai aspek distribusi penjualan di tiga toko:
● Toko A memiliki median penjualan yang lebih rendah dibandingkan dengan toko
lainnya dan variasi penjualannya juga relatif sempit.
● Toko B memiliki median penjualan yang lebih tinggi dan variasi yang lebih luas
dibandingkan dengan Toko A.
● Toko C memiliki median penjualan yang hampir sama dengan Toko B, tetapi ada
beberapa pencilan yang menunjukkan penjualan yang sangat tinggi pada beberapa
hari tertentu.
Kombinasi Box Plot dengan swarmplot memberikan gambaran yang jelas tentang distribusi
penjualan di setiap toko serta densitas penjualan pada setiap level penjualan. Ini sangat
berguna untuk memahami kinerja toko dan menentukan strategi penjualan di masa
mendatang.
Misalnya, anggap kamu memiliki data penjualan dari beberapa toko di berbagai kota.
Dengan Box Plot, kamu dapat membandingkan distribusi penjualan berdasarkan toko dan
kota dalam satu visualisasi.
Mari kita ciptakan contoh dengan data sintetis untuk memvisualisasikan hal ini.
# Membuat data sintetis untuk penjualan di beberapa toko di beberapa
kota
np.random.seed(42)
kota = ['Jakarta', 'Bandung', 'Surabaya']
toko = ['A', 'B', 'C']
data = []
for k in kota:
for t in toko:
jumlah_penjualan = np.random.randint(50, 150, 30)
for j in jumlah_penjualan:
data.append([k, t, j])
Output:
Dalam visualisasi di atas, Box Plot memberi kita kemampuan untuk memahami distribusi
penjualan berdasarkan dua dimensi: toko dan kota. Sehingga, kita dapat menarik beberapa
kesimpulan:
● Jakarta: Di kota ini, Toko C memiliki median penjualan yang paling tinggi, diikuti
oleh Toko B dan Toko A.
● Bandung: Semua toko memiliki median penjualan yang hampir serupa, tetapi Toko
C memiliki variasi penjualan yang lebih luas dibandingkan dengan toko lainnya.
● Surabaya: Toko A tampaknya mendominasi dengan median penjualan tertinggi,
sementara Toko B dan Toko C memiliki median yang lebih rendah.
Analisis multivariat dengan Box Plot ini memberikan gambaran mendalam tentang
bagaimana distribusi penjualan di setiap toko bervariasi di berbagai kota. Informasi ini bisa
menjadi sangat berharga bagi pemilik bisnis untuk menilai kinerja masing-masing toko di
berbagai lokasi dan merencanakan strategi pemasaran yang lebih efektif.
2.9. Contour Plot
Apakah kamu pernah melihat peta yang menampilkan garis-garis berkelok-kelok yang
tampak seperti jalur di peta topografi? Itulah contoh dari contour plot. Sebuah contour plot
atau plot kontur adalah representasi grafis dari tiga variabel kontinu di dua dimensi. Dua
dari variabel tersebut diwakili oleh sumbu X dan Y, sedangkan yang ketiga diwakili oleh
kontur garis atau warna di plot.
Namun, dalam analisis data, contour plot sering digunakan untuk mengeksplorasi
hubungan antara tiga variabel kontinu. Sebagai contoh, jika kamu ingin memahami
hubungan antara suhu, kelembaban, dan jumlah produk yang terjual, contour plot adalah
alat yang sempurna.
Output:
Pada plot kontur di atas, garis-garis kontur menunjukkan area di mana fungsi
Z memiliki nilai tertentu. Warna yang lebih gelap menunjukkan area dengan nilai
Z yang lebih rendah, sedangkan area yang lebih terang menunjukkan nilai
Z yang lebih tinggi. Dengan kata lain, kamu bisa membayangkan plot kontur ini seperti peta
topografi, di mana garis kontur mewakili ketinggian.
Sebagai contoh, jika kamu memiliki data dengan variasi yang sangat halus, mungkin kamu
ingin lebih banyak garis kontur untuk menyoroti perbedaan tersebut. Sebaliknya, jika kamu
hanya tertarik pada tren umum, beberapa garis kontur mungkin sudah cukup.
Mari kita lihat efek dari mengubah jumlah interval kontur pada visualisasi kita.
# Menggambar Contour Plot dengan interval yang berbeda
plt.figure(figsize=(12, 5))
# Dengan 5 interval
plt.subplot(1, 2, 1)
contour5 = plt.contour(X, Y, Z, 5, cmap='RdGy')
plt.colorbar(contour5)
plt.title('Contour Plot dengan 5 Interval')
plt.xlabel('X')
plt.ylabel('Y')
plt.grid(True, linestyle='--', linewidth=0.7, alpha=0.7)
# Dengan 50 interval
plt.subplot(1, 2, 2)
contour50 = plt.contour(X, Y, Z, 50, cmap='RdGy')
plt.colorbar(contour50)
plt.title('Contour Plot dengan 50 Interval')
plt.xlabel('X')
plt.ylabel('Y')
plt.grid(True, linestyle='--', linewidth=0.7, alpha=0.7)
plt.tight_layout()
plt.show()
Output:
Dari kedua visualisasi di atas, kita dapat melihat perbedaan yang signifikan ketika
mengubah jumlah interval kontur:
Dengan hanya 5 interval, plot kontur memberikan gambaran umum tentang distribusi data.
Ini mungkin berguna jika kamu hanya ingin melihat pola umum dalam data.
Dengan 50 interval, plot kontur memberikan detail yang jauh lebih banyak,
mengungkapkan nuansa halus dalam distribusi data. Meskipun ini memberikan informasi
lebih banyak, mungkin juga terasa sedikit berlebihan tergantung pada konteks analisis
kamu.
Output:
Dalam "Filled Contour Plot" ini, selain garis kontur, kita juga melihat area antara garis-garis
tersebut yang diisi dengan warna. Warna yang berbeda mewakili rentang nilai yang berbeda
dari variabel Z. Ini memberikan gambaran yang lebih intuitif tentang bagaimana variabel Z
berubah seiring dengan X dan Y.
plt.figure(figsize=(8, 6))
filled_contour = plt.contourf(X, Y, Z, 20, cmap='RdGy', alpha=0.7)
contour = plt.contour(X, Y, Z, 20, colors='black')
plt.colorbar(filled_contour)
plt.title('Kombinasi Filled Contour dan Contour Plot')
plt.xlabel('X')
plt.ylabel('Y')
plt.grid(True, linestyle='--', linewidth=0.7, alpha=0.7)
plt.show()
Output:
Dalam visualisasi di atas, kita memiliki filled contour plot sebagai latar belakang dengan
garis kontur yang ditambahkan di atasnya. Garis kontur hitam memberikan kontras yang
jelas dengan warna-warna dari filled contour plot, memungkinkan kita untuk dengan
mudah melihat dan menginterpretasi tingkat kontur tertentu. Menggabungkan kedua
jenis plot kontur ini memberikan kita visualisasi yang penuh informasi namun tetap
mudah dibaca.
2.10. Hexbin Plot
Seiring dengan bertambahnya volume data yang kita miliki, visualisasi data menjadi lebih
menantang. Pada situasi di mana kita memiliki banyak titik data yang tumpang tindih,
scatter plot mungkin tidak lagi informatif. Di sinilah Hexbin Plot datang untuk
menyelamatkan.
Mengapa Hexagonal?
Mungkin kamu bertanya-tanya, mengapa kita menggunakan bentuk heksagonal? Alasannya
adalah heksagon adalah bentuk yang paling efisien untuk menutupi area 2D tanpa celah dan
tanpa tumpang tindih.
df_hexbin = pd.DataFrame({
'X': x,
'Y': y
})
Output:
Dalam visualisasi di atas, setiap sel heksagonal mewakili area di mana titik -titik data
dikelompokkan. Warna yang lebih gelap menunjukkan bahwa ada lebih banyak titik di sel
heksagonal tersebut, sedangkan warna yang lebih terang menunjukkan sebaliknya.
Dari Hexbin Plot ini, kita dapat dengan jelas melihat hubungan positif antara variabel X dan
Y yang kita ciptakan. Selain itu, kita juga dapat melihat daerah mana yang memiliki
konsentrasi titik data yang lebih tinggi.
# Plot dengan gridsize yang lebih besar (sel yang lebih kecil)
plt.subplot(1, 2, 2)
plt.hexbin(df_hexbin['X'], df_hexbin['Y'], gridsize=50, cmap='Blues')
plt.colorbar(label='Jumlah Titik per Sel')
plt.title('Hexbin Plot dengan Gridsize 50')
plt.xlabel('X')
plt.ylabel('Y')
plt.grid(True, linestyle='--', linewidth=0.7, alpha=0.7)
plt.tight_layout()
plt.show()
Output:
Pada dua visualisasi di atas, kita dapat melihat bagaimana perubahan sederhana dapat
memberikan nuansa yang berbeda pada Hexbin Plot:
● Palet "inferno" memberikan nuansa yang lebih "panas" pada plot, yang mungkin
cocok untuk menampilkan intensitas atau urgensi.
● Gridsize 50 menghasilkan sel yang lebih kecil, yang memungkinkan kita untuk
melihat detail yang lebih rinci dari distribusi titik data.
Namun, sebelum melanjutkan, penting untuk diingat bahwa seperti semua visualisasi data,
Hexbin Plot memberikan gambaran kasar dari data. Meskipun sangat berguna untuk
mendapatkan gambaran umum, selalu penting untuk mengeksplorasi data lebih lanjut
untuk memahami nuansa dan detail yang mungkin hilang dalam visualisasi semacam ini.
Mari kita jelajahi lebih lanjut mengenai Hexbin Plot dengan skenario yang lebih kompleks.
Sebagai contoh, bayangkan kamu memiliki dataset yang merepresentasikan penjualan
produk di berbagai lokasi di suatu kota. Dataset ini memiliki koordinat geografis (lintang
dan bujur) serta jumlah penjualan di setiap lokasi. Dengan Hexbin Plot, kita dapat
memvisualisasikan di mana konsentrasi penjualan tertinggi berada.
df_sales = pd.DataFrame({
'Latitude': lats,
'Longitude': lons,
'Sales': sales
})
Output:
Dalam visualisasi di atas, kita dapat melihat bagaimana penjualan produk terdistribusi di
seluruh kota. Seperti yang kita harapkan berdasarkan data sintetis yang kita ciptakan:
● Ada konsentrasi penjualan yang lebih tinggi (warna yang lebih gelap) di dekat pusat
kota, yang ditandai dengan koordinat (0,0).
● Penjualan menurun saat kita bergerak menjauh dari pusat kota, dengan area
pinggiran kota memiliki penjualan yang lebih rendah (warna yang lebih terang).
Dengan Hexbin Plot, kita dapat dengan cepat mendapatkan gambaran tentang daerah mana
yang memiliki penjualan tertinggi dan mana yang mungkin memerlukan perhatian lebih
untuk meningkatkan penjualan.
Output:
Dalam visualisasi di atas, setiap panah mewakili vektor angin di titik tertentu. Arah panah
menunjukkan arah angin, sedangkan panjang panah memberikan informasi tentang
kecepatan angin. Dari plot ini, kamu dapat melihat bagaimana arah dan kecepatan angin
berbeda di berbagai lokasi di daerah tersebut.
Stem plot sering digunakan dalam analisis statistik dan penelitian ilmiah untuk:
● Menampilkan Distribusi Data: Stem plot dapat memberikan gambaran yang jelas
tentang bagaimana data Anda didistribusikan, baik dalam hal frekuensi maupun
kecenderungan sentral.
● Membandingkan Beberapa Set Data: Anda dapat membandingkan beberapa set data
dalam satu stem plot, membuatnya lebih mudah untuk melihat perbedaan dan
kesamaan antara set data tersebut.
● Menunjukkan Variasi dalam Data: Dengan stem plot, Anda dapat melihat seberapa
besar variasi dalam data Anda, dan apakah ada outlier.
Meski memiliki banyak kegunaan, stem plot juga memiliki beberapa kekurangan. Salah
satunya adalah bahwa mereka mungkin tidak sesuai untuk data dengan rentang nilai yang
sangat luas, karena plot tersebut bisa menjadi sangat panjang dan sulit dibaca.
Output:
Dalam stem plot di atas, sumbu X merepresentasikan jam dalam sehari, dan sumbu Y
merepresentasikan jumlah penjualan. Setiap titik pada plot menunjukkan jumlah penjualan
pada jam tertentu, dan garis yang menghubungkan titik ke sumbu X (batang "stem")
membantu menunjukkan perbedaan antara titik data.
Stem plot ini memberikan gambaran jelas tentang bagaimana penjualan berubah selama
sehari. Dengan melihat plot, kita dapat melihat bahwa ada fluktuasi dalam penjualan
sepanjang hari.
plt.show()
Output:
Dalam stem plot yang telah dimodifikasi ini, kita mengubah warna dan bentuk dari titik
data, serta warna dari garis batang. Bentuk titik data telah diubah menjadi persegi ('s' dalam
kode), dan warnanya telah diubah menjadi merah. Batangnya sekarang berwarna hijau, dan
baseline yang mewakili sumbu X sekarang berwarna biru.
Perubahan ini tidak mengubah informasi yang disampaikan oleh plot, tetapi dapat
membuat plot lebih menarik secara visual atau memudahkan pembacaan. Sebagai contoh,
warna yang berbeda untuk titik dan batang bisa membuatnya lebih mudah untuk
membedakan antara titik data dan batang pada plot yang sangat padat.
2.13. Error Bars
Mengukur dan menganalisis data adalah bagian penting dari banyak disiplin ilmu. Namun,
ketika kita mengambil pengukuran, selalu ada beberapa ketidakpastian yang terkait dengan
setiap pengukuran. Oleh karena itu, sangat penting untuk memahami dan menyajikan
ketidakpastian ini dengan benar saat kita berbicara tentang data kita. Salah satu cara untuk
melakukannya adalah dengan menggunakan error bars.
plt.show()
Output:
Kini, kita berhasil memvisualisasikan data suhu dengan error bars yang merepresentasikan
ketidakpastian untuk setiap pengukuran. Dalam plot di atas:
● Titik Biru: Menunjukkan rata-rata suhu yang diukur setiap hari.
● Garis Biru: Menghubungkan titik-titik untuk memberikan gambaran umum tentang
tren suhu selama seminggu.
● Error Bars Merah: Menunjukkan kesalahan standar dari setiap pengukuran,
memberikan gambaran tentang seberapa yakin kita dengan pengukuran tersebut.
Capsize pada ujung error bars (uji kecil di ujung bar merah) menambahkan sentuhan visual
yang menjelaskan batas kesalahan. Ini memberikan gambaran yang lebih baik tentang
seberapa besar variasi yang mungkin ada dari pengukuran rata-rata.
2.13.2. Error Bars untuk Data Dua Dimensi
Dalam contoh sebelumnya, kita melihat bagaimana menambahkan error bars ke sumbu Y.
Namun, dalam beberapa kasus, kita mungkin ingin menambahkan error bars ke kedua
sumbu (X dan Y). Misalnya, jika kita melakukan percobaan di mana kedua variabel memiliki
ketidakpastian, maka akan berguna untuk menunjukkan error bars di kedua sumbu.
Mari kita lihat contoh di mana kita memiliki data titik (X, Y) dan kita memiliki
ketidakpastian pada kedua pengukuran tersebut. Misalkan kita memiliki data tentang posisi
suatu objek dalam dua dimensi, dan kita ingin menampilkan ketidakpastian posisi tersebut.
# Membuat data sintetis
positions = np.array([[1, 2], [2, 3], [3, 1.5], [4, 2.5], [5, 3]])
x_errors = np.random.rand(5) * 0.2 # Kesalahan standar untuk pengukuran
X
y_errors = np.random.rand(5) * 0.3 # Kesalahan standar untuk pengukuran
Y
plt.show()
Output:
Dalam visualisasi di atas, kita dapat melihat posisi objek di ruang dua dimensi (X, Y)
bersama dengan ketidakpastian dari masing-masing pengukuran:\
● Titik Biru: Menunjukkan posisi objek yang diukur.
● Error Bars Merah (Horisontal): Menunjukkan kesalahan standar dari pengukuran
posisi X.
● Error Bars Merah (Vertikal): Menunjukkan kesalahan standar dari pengukuran
posisi Y.
Dengan menambahkan error bars ke kedua sumbu, kita dapat dengan jelas menyampaikan
ketidakpastian dari kedua pengukuran kepada pembaca atau pemirsa.
Misalkan kita memiliki data berikut: waktu (dalam hari) vs. akurasi algoritma (dalam
persen), dengan rentang ketidakpastian untuk setiap pengukuran akurasi.
# Membuat data sintetis
np.random.seed(42)
days = np.linspace(1, 30, 30)
accuracy = 75 + np.sin(days/5)*5 + np.random.randn(30) * 3
error = (np.random.rand(30) + 1) * 2
plt.show()
Output:
Di plot di atas:
● Garis Biru: Mewakili rata-rata akurasi algoritma dari waktu ke waktu.
● Area Biru Muda: Ini adalah 'filled error band' yang mewakili ketidakpastian dalam
pengukuran akurasi. Lebar band ini menunjukkan seberapa besar variasi yang kita
harapkan dari rata-rata akurasi.
Dalam contoh ini, kita dapat melihat bahwa akurasi algoritma berfluktuasi dari waktu ke
waktu, tetapi ada juga beberapa ketidakpastian yang terkait dengan setiap pengukuran
akurasi. Filled error bands memberikan cara yang mudah dimengerti untuk
memvisualisasikan ketidakpastian ini.
Mari kita coba beberapa variasi dari filled error bands untuk memahami bagaimana kita
dapat menyesuaikan tampilannya. Sebagai contoh, kita akan mempertimbangkan data
tentang pertumbuhan tanaman selama waktu dengan ketidakpastian yang berkaitan dengan
pengukuran pertumbuhan.
# Membuat data sintetis untuk pertumbuhan tanaman
growth = np.linspace(5, 30, 30) + np.sin(days/5)*3 + np.random.randn(30)
* 2
growth_error = (np.random.rand(30) + 0.5) * 2
plt.show()
Output:
Mari kita buat polar plot sederhana untuk memahami konsep ini. Sebagai contoh pertama,
kita akan memvisualisasikan arah dan kecepatan angin selama 24 jam. Misalkan kita
memiliki data kecepatan angin dan arah angin (dalam derajat) untuk setiap jam dari suatu
hari.
# Membuat data sintetis untuk arah dan kecepatan angin
hours = np.linspace(0, 24, 24)
wind_speeds = np.abs(np.sin(hours/6)*25 + np.random.randn(24) * 5)
wind_directions = np.deg2rad(hours * 15) # Mengonversi derajat ke
radian
plt.show()
Output:
Misalnya, bayangkan kamu ingin menampilkan data fase bulan dalam bentuk polar plot.
Untuk tujuan ini, kita akan memvisualisasikan fase bulan selama 30 hari. Fase bulan akan
diwakili oleh jarak dari pusat lingkaran, dengan setiap hari mewakili sudut tertentu. Mari
kita buat visualisasi ini!
# Membuat data sintetis untuk fase bulan
moon_phase = np.abs(np.sin(days/30 * 2 * np.pi)) * 10 + 1
moon_directions = np.deg2rad(days * 12) # Mengonversi derajat ke radian
plt.show()
Output:
Dalam visualisasi di atas:
● Sumbu Lingkaran: Mewakili hari dalam sebulan. Setiap hari mewakili sudut tertentu
dalam lingkaran.
● Jarak dari Pusat: Menggambarkan fase bulan. Saat jarak dari pusat mencapai
puncak, itu menunjukkan bulan purnama, dan saat berada di dekat pusat, itu
menunjukkan bulan baru.
● Titik dan Garis Abu-abu: Menunjukkan fase bulan setiap hari selama sebulan.
Visualisasi ini memberikan gambaran yang menarik tentang bagaimana fase bulan berubah
selama sebulan. Dengan polar plot, kita dapat dengan mudah melihat siklus bulan dari
bulan baru ke bulan purnama dan kembali lagi ke bulan baru.
2.15.3. Polar Plot dengan Variasi Warna
Kita juga bisa menambahkan variasi warna ke plot polar untuk menonjolkan beberapa
aspek data. Sebagai contoh, kita akan memvisualisasikan suhu udara selama sehari dengan
arah angin. Di sini, arah angin akan diwakili oleh sudut, jarak dari pusat akan menunjukkan
kecepatan angin, dan warna akan menunjukkan suhu. Mari kita buat visualisasi ini!
# Membuat data sintetis untuk suhu, kecepatan, dan arah angin
temperatures = 25 + np.sin(hours/12)*5 + np.random.randn(24) * 2
plt.show()
Output:
Dalam visualisasi di atas:
● Sumbu Lingkaran: Mewakili arah angin selama 24 jam.
● Jarak dari Pusat: Menggambarkan kecepatan angin. Semakin jauh dari pusat,
semakin besar kecepatan angin.
● Warna Titik: Menunjukkan suhu udara pada jam tertentu. Skala warna panas
(seperti kuning dan oranye) menunjukkan suhu yang lebih tinggi, sedangkan warna
yang lebih dingin (seperti ungu) menunjukkan suhu yang lebih rendah.
Dengan memasukkan informasi tambahan ke dalam visualisasi kita, kita dapat memberikan
gambaran yang lebih lengkap tentang situasi yang sedang kita analisis. Di sini, kita dapat
melihat bagaimana kecepatan angin, arah angin, dan suhu saling berhubungan selama 24
jam.
2.16. Step Plot
Pernahkah kamu melihat grafik di mana garis data tampak seperti tangga atau serangkaian
langkah daripada garis halus yang biasa kita lihat? Itulah yang disebut sebagai 'Step Plot'
atau 'Staircase Plot'. Plot jenis ini sangat berguna dalam situasi di mana kita ingin
menunjukkan perubahan nilai data pada titik-titik tertentu dan bagaimana data tersebut
tetap konstan di antara titik-titik tersebut.
plt.show()
Output:
Dalam visualisasi di atas, kita dapat melihat bagaimana harga saham berubah setiap hari.
Garis biru yang terlihat seperti tangga adalah inti dari step plot. Area biru muda di bawah
garis memberikan efek visual tambahan yang menunjukkan area di bawah kurva.
Kunci dari step plot adalah parameter where yang menentukan di mana langkah harus
dimulai. Dalam contoh ini, kita menggunakan where='mid', yang berarti langkah dimulai di
tengah antara titik data sebelumnya dan titik data saat ini.
plt.show()
Output:
2.17. Spectrogram
Selamat datang di dunia visualisasi yang menakjubkan dari Spectrogram! Pernahkah kamu
berpikir bagaimana kita bisa "melihat" suara? Atau bagaimana kita dapat mengetahui
komponen frekuensi dari sinyal waktu yang kompleks? Jawabannya terletak pada alat
visualisasi yang disebut spectrogram.
# Menampilkan spectrogram
plt.figure(figsize=(12, 8))
Pxx, freqs, bins, im = plt.specgram(y, NFFT=256, Fs=Fs, noverlap=128,
cmap='viridis')
plt.colorbar(label='Intensitas (dB)')
plt.title('Spectrogram dari Sinyal Sintetis')
plt.xlabel('Waktu (detik)')
plt.ylabel('Frekuensi (Hz)')
plt.tight_layout()
plt.show()
Output:
Dalam visualisasi di atas, kamu bisa melihat spectrogram dari sinyal sintetis yang kita buat.
Warna yang lebih terang pada gambar menunjukkan frekuensi yang memiliki amplitudo
yang lebih besar pada waktu tertentu.
● Garis Horizontal Pertama (Paling Bawah): Mewakili gelombang sinus dengan
frekuensi 5 Hz.
● Garis Horizontal Kedua: Mewakili gelombang sinus dengan frekuensi 50 Hz.
● Garis Horizontal Ketiga (Paling Atas): Mewakili gelombang sinus dengan frekuensi
100 Hz.
Dari spectrogram ini, kita dapat dengan mudah mengidentifikasi komponen frekuensi dari
sinyal dan bagaimana amplitudo mereka berubah seiring waktu. Itulah kekuatan dari
spectrogram!
Mari kita coba dengan sinyal suara yang sedikit lebih kompleks. Misalkan kita memiliki
suara yang dimulai dengan frekuensi rendah dan meningkat seiring waktu. Ini bisa
mewakili suara instrumen musik yang dimainkan dengan cara tertentu atau suara binatang.
Mari kita ciptakan sinyal seperti itu dan lihat spectrogramnya.
# Membuat sinyal suara yang frekuensinya meningkat seiring waktu
y_chirp = np.sin(2 * np.pi * (f1 + (f3 - f1) * t / max(t)) * t)
# Menampilkan spectrogram
plt.figure(figsize=(12, 8))
Pxx, freqs, bins, im = plt.specgram(y_chirp, NFFT=256, Fs=Fs,
noverlap=128, cmap='viridis')
plt.colorbar(label='Intensitas (dB)')
plt.title('Spectrogram dari Sinyal Suara Chirp')
plt.xlabel('Waktu (detik)')
plt.ylabel('Frekuensi (Hz)')
plt.tight_layout()
plt.show()
Output:
Pada visualisasi di atas, kita melihat representasi dari suara "chirp". Dalam kasus ini, "chirp"
adalah sinyal yang frekuensinya meningkat (atau kadang-kadang menurun) seiring
berjalannya waktu.
Kamu bisa melihat bagaimana intensitas bergerak dari bawah ke atas, menunjukkan
kenaikan frekuensi sinyal dari waktu ke waktu. Ini adalah karakteristik khas dari sinyal
"chirp". Spectrogram ini memberi kita pemahaman mendalam tentang bagaimana suara
tersebut berubah seiring waktu dalam hal frekuensi.
MODUL 3: Pengaturan dan Personalisasi Plot
3.1. Mengatur Judul dan Label
Dalam dunia visualisasi data, detail-detail kecil sering kali membuat perbedaan besar.
Bayangkan menemukan grafik yang menarik di internet, tetapi tanpa judul atau label
sumbu. Kamu mungkin bertanya-tanya: "Apa yang sedang aku lihat? Apa yang dimaksud
dengan angka-angka ini? Apa tujuan dari grafik ini?" Inilah mengapa judul dan label sangat
penting.
Mari kita mulai dengan contoh sederhana. Misalkan kamu memiliki data tentang penjualan
buku di sebuah toko selama satu tahun. Dengan Matplotlib, menambahkan judul sangat
mudah. Mari kita buat data sintetisnya terlebih dahulu.
import pandas as pd
df_penjualan = pd.DataFrame({
'Bulan': bulan,
'Penjualan': penjualan
})
# Plotting data
plt.figure(figsize=(10, 6))
plt.plot(df_penjualan['Bulan'], df_penjualan['Penjualan'], marker='o',
color='b', linestyle='-')
plt.title('Penjualan Buku Selama Satu Tahun')
plt.xlabel('Bulan')
plt.ylabel('Jumlah Buku Terjual')
plt.grid(True)
plt.tight_layout()
plt.show()
Output:
Seperti yang kamu lihat, grafik di atas menunjukkan penjualan buku selama satu tahun.
Judul "Penjualan Buku Selama Satu Tahun" memberikan gambaran umum tentang apa yang
ditampilkan oleh grafik. Sementara label pada sumbu x dan y ("Bulan" dan "Jumlah Buku
Terjual") memberikan informasi lebih lanjut tentang data yang disajikan.
Mari kita pertimbangkan contoh lain. Misalkan kamu ingin menampilkan grafik tentang
pertumbuhan penduduk di sebuah kota selama beberapa tahun terakhir. Di sini, penting
untuk menunjukkan bahwa angka pada sumbu y mewakili "ribuan" penduduk. Mari kita
lihat bagaimana ini bisa dilakukan dengan Matplotlib.
# Membuat data sintetis pertumbuhan penduduk
tahun = list(range(2010, 2022))
penduduk = [50, 52, 55, 58, 62, 64, 67, 69, 72, 75, 78, 80] # dalam
ribuan
df_penduduk = pd.DataFrame({
'Tahun': tahun,
'Penduduk': penduduk
})
# Plotting data
plt.figure(figsize=(10, 6))
plt.plot(df_penduduk['Tahun'], df_penduduk['Penduduk'], marker='o',
color='g', linestyle='-')
plt.title('Pertumbuhan Penduduk Kota X (2010-2021)')
plt.xlabel('Tahun')
plt.ylabel('Jumlah Penduduk (dalam ribuan)')
plt.grid(True, which='both', linestyle='--', linewidth=0.5)
plt.tight_layout()
plt.show()
Output:
Dari grafik di atas, kita bisa melihat bagaimana penduduk Kota X telah berkembang selama
beberapa tahun terakhir. Dengan menambahkan "dalam ribuan" ke label sumbu y, kita
memberikan informasi yang jelas kepada pembaca bahwa, misalnya, angka 60 pada sumbu
y sebenarnya mewakili 60.000 penduduk.
3.1.3. Mengatur Ukuran dan Gaya Font
Kadang-kadang, kamu mungkin ingin menekankan judul atau membuat label lebih mudah
dibaca dengan mengubah ukuran font atau gayanya. Matplotlib memungkinkan kamu
untuk melakukan hal ini dengan mudah. Sebagai contoh, mari kita buat judul lebih
menonjol dan label sumbu dengan font miring.
# Plotting dengan pengaturan font khusus
plt.figure(figsize=(10, 6))
plt.plot(df_penjualan['Bulan'], df_penjualan['Penjualan'], marker='o',
color='b', linestyle='-')
plt.title('Penjualan Buku Selama Satu Tahun', fontsize=16,
fontweight='bold')
plt.xlabel('Bulan', fontsize=12, style='italic')
plt.ylabel('Jumlah Buku Terjual', fontsize=12, style='italic')
plt.grid(True)
plt.tight_layout()
plt.show()
Output:
Dengan sedikit penyesuaian pada font, grafik kita sekarang memiliki penekanan yang lebih
kuat pada judul, sementara label sumbu dengan font miring memberikan sentuhan estetika
tambahan. Ingatlah bahwa tujuan utamanya adalah untuk membuat grafik lebih mudah
dibaca dan dipahami, jadi pastikan untuk tidak berlebihan dengan kustomisasi.
3.1.4. Menggunakan Font Eksternal
Matplotlib memungkinkan kamu untuk menggunakan font eksternal, yang bisa sangat
berguna jika kamu ingin menyelaraskan visualisasi dengan branding perusahaan atau tema
khusus. Misalnya, mungkin kamu memiliki font khusus yang digunakan dalam semua
materi pemasaran dan kamu ingin grafik kamu sesuai dengan estetika tersebut.
Mari kita lihat bagaimana kamu bisa mengatur font dengan menggunakan rcParams dari
Matplotlib. (Catatan: Di sini kita akan menggunakan font default, karena kita tidak memiliki
akses ke font eksternal di lingkungan ini.)
df_penjualan = pd.DataFrame({
'Bulan': bulan,
'Penjualan': penjualan
})
Output:
Seperti yang kamu lihat, dengan sedikit penyesuaian pada parameter y dari fungsi title, kita
berhasil menggeser judul sedikit lebih tinggi dari posisi defaultnya. Hal ini mungkin
berguna jika kamu memiliki elemen lain di bagian atas grafik yang dapat mengganggu
pembacaan judul.
Mari kita coba memutar label sumbu x agar lebih mudah dibaca.
# Plotting dengan label sumbu x yang diputar
plt.figure(figsize=(12, 6))
plt.plot(df_penjualan['Bulan'], df_penjualan['Penjualan'], marker='o',
color='r', linestyle='-')
plt.title('Penjualan Buku Selama Satu Tahun', fontsize=16)
plt.xlabel('Bulan', fontsize=12)
plt.ylabel('Jumlah Buku Terjual', fontsize=12)
plt.xticks(rotation=45) # Memutar label sumbu x sebesar 45 derajat
plt.grid(True, which='both', linestyle='--', linewidth=0.5)
plt.tight_layout()
plt.show()
Output:
3.2. Pengaturan Warna dan Marker
Warna dan marker merupakan dua komponen penting dalam visualisasi data, terutama
dalam grafik garis dan scatter plot. Warna dapat digunakan untuk membedakan antar
kategori, menyoroti tren tertentu, atau menampilkan kepadatan data. Sementara marker
memberikan representasi visual dari setiap titik data, memungkinkan pembaca untuk
melacak nilai tertentu atau menyoroti outlier.
Dalam subbab ini, kita akan mengeksplorasi berbagai cara untuk menyesuaikan warna dan
marker dalam plot Matplotlib. Dari memilih palet warna yang sesuai hingga menggunakan
marker yang berbeda untuk membedakan kategori, kita akan melihat bagaimana
perubahan kecil ini dapat membuat perbedaan besar dalam interpretasi dan estetika grafik.
Output:
Dalam contoh di atas, garis untuk fungsi sin(x) diwarnai merah, sedangkan garis untuk
fungsi cos(x) memiliki warna hijau yang ditentukan dengan kode HEX. Pemilihan warna
yang kontras memudahkan pembaca untuk membedakan antara dua fungsi tersebut.
Mari kita coba plot beberapa seri data dengan palet warna seaborn.
import seaborn as sns
plt.figure(figsize=(12, 6))
for i, y in enumerate(y_values):
plt.plot(x, y, label=f'sin(x+{i})', color=colors[i])
Output:
Dengan palet warna, kita dapat dengan mudah memilih warna yang harmonis dan berbeda
untuk setiap seri data. Seaborn menyediakan berbagai palet warna yang dapat kamu
gunakan, seperti "husl", "pastel", "deep", dan banyak lagi. Kamu dapat menyesuaikan palet
ini sesuai kebutuhan visualisasi kamu.
3.2.2. Mengatur Marker
Dalam grafik garis atau scatter plot, marker digunakan untuk menunjukkan posisi titik data.
Matplotlib menawarkan berbagai pilihan marker, seperti lingkaran ('o'), bintang ('*'), persegi
('s'), dan banyak lainnya.
Output:
Dalam contoh di atas, kita menggunakan marker lingkaran untuk seri data sin(x) dan
marker bintang untuk cos(x). Selain membedakan antara dua seri data, marker juga
membantu pembaca dalam mengidentifikasi posisi titik data yang sebenarnya.
Mari kita lihat bagaimana kita dapat menyesuaikan ukuran marker dalam plot.
# Membuat data sintetis
x = np.random.rand(10)
y = np.random.rand(10)
sizes = np.random.randint(50, 300, 10) # Menghasilkan ukuran marker
yang berbeda
plt.figure(figsize=(12, 6))
plt.scatter(x, y, s=sizes, color='blue', alpha=0.6, edgecolors='w',
linewidth=0.5)
Output:
Pada contoh di atas, ukuran marker menunjukkan seberapa besar suatu titik dalam dataset
sintetis. Dengan menyesuaikan ukuran marker, kamu bisa menambahkan dimensi
tambahan ke visualisasi data kamu, membuatnya lebih informatif dan menarik.
Sebagai catatan, saat memodifikasi ukuran marker, pastikan untuk menjaga keseimbangan
antara estetika dan keterbacaan. Marker yang terlalu besar dapat menutupi data lainnya,
sementara marker yang terlalu kecil mungkin sulit dilihat.
Dalam Matplotlib, kamu bisa mengatur opasitas dengan parameter alpha. Nilai alpha
berkisar antara 0 (sepenuhnya transparan) hingga 1 (sepenuhnya tidak transparan).
plt.figure(figsize=(12, 6))
plt.scatter(x, y, color='blue', alpha=0.3) # Mengatur opasitas titik
Output:
Dengan mengatur opasitas titik dalam scatter plot, kamu dapat dengan mudah melihat area
mana yang memiliki kepadatan titik yang lebih tinggi. Area dengan tumpang tindih titik
yang lebih banyak akan tampak lebih gelap.
Misalnya, jika kamu memiliki data yang menunjukkan frekuensi tertentu pada koordinat
tertentu, kamu bisa menggunakan gradasi warna untuk menunjukkan frekuensi tersebut.
Semakin gelap warnanya, semakin tinggi frekuensinya.
# Membuat data sintetis
x = np.random.rand(100)
y = np.random.rand(100)
colors = x * y # Semakin besar produk x dan y, semakin gelap warnanya
plt.figure(figsize=(12, 6))
scatter = plt.scatter(x, y, c=colors, cmap='Blues', edgecolors='w',
linewidth=0.5)
Output:
Dalam contoh di atas, kita menggunakan gradasi warna biru untuk menyoroti intensitas
data. Semakin tinggi produk dari koordinat x dan y, semakin gelap warna titiknya. Ini
memberi kamu wawasan tambahan tentang distribusi dan intensitas data tanpa perlu
menambahkan informasi tambahan.
Mari kita lihat contoh di mana kita mengkombinasikan warna, opasitas, dan jenis marker
yang berbeda.
# Membuat data sintetis
x = np.linspace(0, 10, 30)
y1 = np.sin(x)
y2 = np.cos(x)
plt.figure(figsize=(12, 6))
Output:
Dengan memahami bagaimana cara mengatur warna, opasitas, dan marker, kamu dapat
mengkustomisasi tampilan grafik sesuai dengan kebutuhanmu. Kombinasi dari semua
elemen-elemen ini memungkinkan kamu untuk menyampaikan informasi dengan jelas dan
efektif, memastikan bahwa visualisasi data kamu tidak hanya menarik, tetapi juga
informatif.
Mari kita lihat contoh di mana kita memberikan warna pada titik berdasarkan variabel
ketiga.
# Membuat data sintetis
x = np.random.rand(100)
y = np.random.rand(100)
z = x * y # Variabel ketiga
plt.figure(figsize=(12, 6))
scatter = plt.scatter(x, y, c=z, cmap='viridis', edgecolors='w',
linewidth=0.5)
Output:
Dalam plot di atas, kita telah mewarnai setiap titik berdasarkan nilai dari variabel z (yang
dalam kasus ini adalah hasil perkalian dari x dan y). Menggunakan warna dengan cara ini
memberikan dimensi tambahan ke dalam visualisasi kita dan memungkinkan kita untuk
melihat hubungan atau pola tambahan dalam data. Peta warna 'viridis' memberikan rentang
warna dari kuning ke ungu, memberi tahu kita tentang rentang nilai z.
# Normalisasi ukuran
sizes = (w - w.min()) / (w.max() - w.min()) * 200 # Mengubah rentang
ukuran menjadi 0-200
plt.figure(figsize=(12, 6))
scatter = plt.scatter(x, y, c=z, s=sizes, cmap='viridis',
edgecolors='w', linewidth=0.5, alpha=0.6)
Output:
Dalam visualisasi di atas, setiap titik diberi warna berdasarkan nilai z dan ukurannya
ditentukan oleh variabel w. Ini memberi kita kemampuan untuk memahami empat variabel
sekaligus: posisi x, posisi y, warna (nilai z), dan ukuran (nilai w). Dengan teknik ini, kamu
dapat memaksimalkan jumlah informasi yang disampaikan dalam satu plot.
plt.figure(figsize=(10, 6))
bars = plt.bar(categories, values, color=colors, edgecolor='black')
Output:
Pada bar plot di atas, kita menyoroti batang dengan nilai tertinggi dengan warna biru,
sementara batang lainnya diwarnai abu-abu. Teknik semacam ini sangat berguna untuk
segera menarik perhatian ke bagian data yang paling penting atau menarik.
Dengan memahami bagaimana mengkustomisasi warna dan marker, kamu dapat membuat
visualisasi yang lebih informatif dan menarik. Tidak hanya itu, kamu juga bisa
menyesuaikan tampilan grafik untuk cocok dengan tema atau branding tertentu. Dengan
begitu, kamu bisa memastikan bahwa grafik kamu tidak hanya informatif, tetapi juga estetis
dan menarik secara visual.
3.2.10. Mengatur Warna Berdasarkan Kondisi Tertentu
Dalam beberapa situasi, kamu mungkin ingin mewarnai data berdasarkan kondisi tertentu,
bukan hanya berdasarkan nilai. Misalnya, anggap kamu memiliki dataset tentang penjualan
produk dan kamu ingin menyoroti produk yang penjualannya di bawah target.
plt.figure(figsize=(10, 6))
bars = plt.bar(products, sales, color=colors, edgecolor='black',
alpha=0.7)
Output:
Grafik di atas menampilkan penjualan lima produk. Batang yang berwarna merah
menunjukkan produk yang penjualannya di bawah target, sementara yang berwarna hijau
menunjukkan produk yang memenuhi atau melampaui target. Garis putus-putus abu-abu
menandakan target penjualan. Dengan menggunakan warna berdasarkan kondisi seperti
ini, kamu dapat dengan cepat mengidentifikasi area yang memerlukan perhatian atau
tindakan.
Output:
Grafik di atas menampilkan distribusi skor lima siswa. Warna batang menggambarkan skor
relatif dari setiap siswa; semakin gelap warnanya, semakin tinggi skornya. Teknik gradient
warna ini memungkinkan kamu untuk menyoroti perbedaan dalam data dengan cara yang
lebih halus.
plt.figure(figsize=(10, 6))
bars = plt.bar(departments, profits, color=custom_palette,
edgecolor='black')
Output:
Dalam grafik di atas, kita telah menerapkan palet warna khusus untuk menampilkan
keuntungan per departemen. Palet warna yang telah didefinisikan menggabungkan
berbagai warna yang serasi dan memberikan tampilan yang khas pada grafik. Dengan
menggunakan palet warna yang kohesif dan menarik, kamu dapat membuat grafik yang
tidak hanya informatif tetapi juga estetis.
3.2.13. Menggunakan Marker yang Berbeda pada Scatter Plot
Marker dalam scatter plot memainkan peran penting dalam membedakan poin data.
Matplotlib menawarkan berbagai pilihan marker yang dapat digunakan untuk
menyesuaikan tampilan poin dalam scatter plot.
plt.figure(figsize=(15, 8))
for idx, marker in enumerate(markers, 1):
plt.scatter(x * idx, y, marker=marker, label=f"Marker '{marker}'",
alpha=0.7)
Output:
Dalam scatter plot di atas, kita menunjukkan berbagai jenis marker yang dapat digunakan
dalam Matplotlib. Dengan memilih marker yang tepat, kamu dapat menambahkan dimensi
tambahan ke visualisasi atau membuatnya lebih mudah dibaca dan dipahami.
plt.figure(figsize=(10, 6))
for marker in set(markers):
mask = markers == marker
plt.scatter(x[mask], y[mask], c=colors[mask], s=sizes[mask],
marker=marker, cmap='viridis', alpha=0.6)
plt.colorbar(label='Intensitas Warna')
plt.title('Menggabungkan Warna dan Marker dalam Scatter Plot',
fontsize=16)
plt.xlabel('x', fontsize=12)
plt.ylabel('y', fontsize=12)
plt.tight_layout()
plt.show()
Output:
Dalam scatter plot di atas, kita telah menggabungkan beberapa aspek visualisasi:
● Posisi (x, y): Menggambarkan dua dimensi data.
● Warna: Intensitas warna poin menggambarkan dimensi ketiga dari data. Dalam
kasus ini, kami menggunakan palet warna viridis, dan colorbar di sisi kanan
mengindikasikan intensitas warna.
● Ukuran: Ukuran dari setiap titik menggambarkan dimensi keempat dari data.
● Bentuk Marker: Menggunakan bentuk marker yang berbeda sebagai dimensi kelima
dari data.
●
Dengan menggabungkan warna, ukuran, dan bentuk marker, kita dapat menampilkan
hingga lima dimensi data dalam satu visualisasi. Namun, penting untuk memastikan bahwa
visualisasi tetap mudah dibaca dan tidak terlalu rumit, yang dapat membingungkan
pembaca.
Kita akan membuat grafik batang yang menampilkan penjualan produk di berbagai kota,
lalu menyimpannya dalam format PNG.
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
Output:
Grafik di atas menampilkan penjualan produk di berbagai kota, dan kita telah berhasil
menyimpannya dalam format PNG.
Output:
Grafik garis di atas menampilkan suhu rata-rata per bulan, dan kita telah berhasil
menyimpannya dalam format PDF.
Output:
Grafik pie di atas menampilkan distribusi kategori, dan kita telah berhasil menyimpannya
dalam format JPEG dengan resolusi tinggi.
3.3.2. Menyimpan Grafik dalam Format Interaktif
Selain menyimpan dalam format gambar, kamu juga dapat menyimpan grafik dalam format
interaktif yang memungkinkan pengguna untuk berinteraksi dengan grafik, seperti
memperbesar, memperkecil, atau memutar grafik 3D.
# Data sintetis
X = np.linspace(-5, 5, 100)
Y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(X, Y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# Membuat grafik 3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis')
Output:
Dengan menyimpan grafik dalam format interaktif, kamu dapat membagikan grafik dengan
orang lain tanpa kehilangan kemampuan interaksi yang ada pada grafik tersebut.
Kita akan menggunakan data suhu rata-rata per bulan, sama seperti yang telah kita gunakan
sebelumnya.
Membuat Grafik
import matplotlib.pyplot as plt
# Data sintetis
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec']
avg_temp = [30, 28, 32, 35, 40, 45, 50, 48, 43, 38, 34, 31]
plt.show()
Output:
Dalam grafik di atas, kita telah menambahkan teks "Terendah" pada bulan Februari, yang
menandakan suhu terendah, dan "Tertinggi" pada bulan Juli, yang menandakan suhu
tertinggi. Ini adalah contoh sederhana dari bagaimana kita bisa menambahkan teks ke
dalam grafik untuk memberikan informasi tambahan.
Kita menggunakan metode plt.text(x, y, 'text') untuk menambahkan teks ke dalam grafik, di
mana x dan y adalah koordinat posisi teks.
plt.show()
Output:
Dalam contoh di atas, kita telah menggunakan metode plt.annotate() untuk menambahkan
anotasi dengan panah. Metode ini memungkinkan kita untuk menunjukkan titik atau area
tertentu dalam grafik dengan menggunakan panah.
Dengan menambahkan anotasi, grafik menjadi lebih informatif dan mudah dimengerti. Ini
adalah alat yang sangat berguna, terutama jika kamu ingin menekankan aspek tertentu dari
data.
3.4.2. Anotasi Kustom
Terkadang, kamu mungkin ingin menambahkan anotasi yang lebih kompleks atau kustom.
Misalnya, kamu mungkin ingin menambahkan bentuk geometris, seperti lingkaran atau
persegi, atau kamu mungkin ingin menggabungkan beberapa elemen anotasi
bersama-sama.
# Menambahkan teks
ax.text(1, 27, 'Terendah', fontsize=12, color='red')
ax.text(6, 51, 'Tertinggi', fontsize=12, color='green')
plt.show()
Output:
Dalam contoh di atas, kita telah menambahkan dua lingkaran di sekitar titik suhu terendah
dan tertinggi dalam grafik. Kita menggunakan kelas Circle dari Matplotlib untuk membuat
lingkaran dan menambahkannya ke dalam grafik menggunakan metode ax.add_patch().
Metode ini memungkinkan kita untuk menambahkan bentuk geometris kustom ke dalam
grafik, yang dapat menjadi alat yang sangat berguna untuk menekankan atau menyoroti
area tertentu dalam data.
Anotasi seperti ini bisa sangat efektif dalam menyampaikan informasi tambahan tentang
grafik dan memandu pemirsa untuk memahami apa yang ingin kamu sampaikan.
plt.show()
Output:
Dalam contoh ini, kita telah mengkombinasikan anotasi teks, panah, dan bentuk geometris
(lingkaran) untuk menekankan titik suhu terendah dan tertinggi dalam grafik. Ini adalah
contoh bagaimana kamu dapat menggabungkan berbagai elemen anotasi untuk
menciptakan visualisasi yang informatif dan menarik.
# Menambahkan teks
ax.text(5, 49, 'Bulan Panas', fontsize=12, color='black')
plt.show()
Output:
Pada contoh di atas, kita telah menyoroti area (atau rentang bulan) dimana suhu rata-rata
berada di atas 40°C. Kita menggunakan kelas Rectangle dari Matplotlib untuk membuat area
yang disorot dan menambahkannya ke dalam grafik menggunakan metode ax.add_patch().
Parameter alpha digunakan untuk membuat area tersebut sedikit transparan sehingga kita
masih dapat melihat grafik garis di bawahnya.
Menyoroti area tertentu dalam grafik adalah cara yang efektif untuk menunjukkan periode
atau rentang nilai yang penting, dan memberikan konteks tambahan untuk membantu
pemirsa memahami grafik dengan lebih baik.
plt.show()
Output:
Dalam visualisasi di atas, kita menggunakan panah untuk menunjukkan tren kenaikan suhu
dari Januari hingga Juli. Menggunakan panah seperti ini adalah cara yang efektif untuk
mengarahkan perhatian pemirsa ke arah tertentu dalam grafik dan menekankan tren atau
perubahan seiring waktu.
# Menambahkan teks
ax.text(5, 49, 'Bulan Panas', fontsize=12, color='black')
plt.show()
Output:
Dalam grafik di atas, kita mengkombinasikan anotasi teks, panah, dan area yang disorot
untuk memberikan gambaran lengkap tentang suhu rata-rata per bulan. Kita menggunakan
warna kuning untuk menyoroti bulan-bulan panas dan panah oranye untuk menunjukkan
tren kenaikan suhu.
plt.show()
Output:
Dalam contoh di atas, kita telah menambahkan anotasi ke setiap titik data dalam grafik
garis, dengan posisi yang disesuaikan secara otomatis. Kita menggunakan parameter xytext
untuk menentukan jarak anotasi dari titik data, dan textcoords='offset points' untuk
menetapkan koordinat relatif.
Hasilnya adalah anotasi yang rapi dan sejajar dengan setiap titik data, tanpa perlu mengatur
posisi masing-masing anotasi secara manual. Ini sangat berguna ketika kamu memiliki
banyak titik data dan ingin menampilkan informasi tambahan untuk setiap titik.
Membuat Grafik dengan Anotasi Otomatis untuk Nilai Maksimum dan Minimum
# Menemukan indeks dan nilai maksimum dan minimum
max_index = avg_temp.index(max(avg_temp))
min_index = avg_temp.index(min(avg_temp))
max_value = max(avg_temp)
min_value = min(avg_temp)
plt.show()
Output:
Dalam grafik di atas, kita telah menambahkan anotasi otomatis untuk menyoroti nilai
maksimum dan minimum dalam data. Anotasi ini mencakup teks yang menunjukkan nilai
maksimum dan minimum, serta panah yang mengarah ke titik data yang relevan.
Cara ini berguna untuk menyoroti puncak dan lembah dalam data, yang dapat membantu
pembaca untuk dengan cepat mengidentifikasi tren dan pola dalam grafik. Dengan
menggunakan anotasi otomatis seperti ini, kamu dapat menambahkan informasi yang
berharga tanpa perlu mengatur posisi anotasi secara manual.
# Membuat plot
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(x_values, y_values, marker='o', linestyle='-')
# Menambahkan grid
ax.grid(True)
# Menampilkan plot
plt.show()
Output:
Dalam contoh di atas, kita menggunakan metode grid(True) untuk menambahkan grid
standar ke plot. Hasilnya adalah grid dengan garis putus-putus yang membantu pembaca
dalam mengukur dan membandingkan data.
# Menampilkan plot
plt.show()
Output:
Dalam contoh di atas, kita mengatur warna grid menjadi abu-abu, jenis garis menjadi
putus-putus, dan lebar garis menjadi 0.5. Dengan menggabungkan gaya ini, kita dapat
membuat grid yang lebih halus yang sesuai dengan estetika plot.
# Menambahkan grid
ax.grid(color='grey', linestyle='--', linewidth=0.5)
# Menampilkan plot
plt.show()
Output:
Dalam contoh di atas, kita menggunakan metode set_xlim dan set_ylim untuk mengatur
rentang sumbu x dan y, masing-masing dari 1 hingga 4 dan dari 10 hingga 25. Hasilnya
adalah plot yang difokuskan pada bagian spesifik dari data.
# Menambahkan grid
ax.grid(color='grey', linestyle='--', linewidth=0.5)
# Menampilkan plot
plt.show()
Output:
Dalam contoh ini, kita menambahkan label sumbu dengan menggunakan metode
set_xlabel dan set_ylabel. Label sumbu x adalah "Waktu (hari)" dan label sumbu y adalah
"Jumlah Penjualan". Ini memberikan konteks tambahan kepada pembaca tentang apa yang
diwakili oleh data dalam plot.
# Menambahkan grid
ax.grid(color='grey', linestyle='--', linewidth=0.5)
# Menampilkan plot
plt.show()
Output:
Di sini, kita menggunakan metode set_xticks untuk menentukan posisi tick sumbu x, dan
metode set_xticklabels untuk memberikan label khusus kepada tick tersebut. Dalam contoh
ini, kita mengganti tick sumbu x dengan label "Hari 1", "Hari 2", dll., yang memberikan
interpretasi tambahan kepada data.
# Menampilkan plot
plt.show()
Output:
Contoh di atas adalah gabungan dari semua teknik yang telah kita pelajari sejauh ini. Kita
telah mengatur rentang sumbu, menambahkan label sumbu, mengatur tick sumbu, dan
menambahkan grid dengan gaya khusus.
# Membuat plot
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(x_log, y_log, marker='', linestyle='-')
# Menambahkan grid
ax.grid(color='grey', linestyle='--', linewidth=0.5)
# Menampilkan plot
plt.show()
Output:
plt.show()
Output:
Pada contoh di atas, kita menggunakan metode twinx() untuk membuat sumbu y kedua
yang berbagi sumbu x yang sama dengan sumbu y pertama. Setiap sumbu y ini dapat
memiliki label, tick, dan warna yang berbeda, sehingga memungkinkan untuk
menampilkan dua set data yang berbeda dalam satu plot.
3.5.5. Menyesuaikan Ukuran Tick Sumbu
Kadang-kadang, kamu mungkin ingin menyesuaikan ukuran tick sumbu untuk membuat
plot lebih mudah dibaca atau lebih sesuai dengan tema visual yang kamu pilih.
# Membuat plot
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(x_tick, y_tick, marker='', linestyle='-')
# Menambahkan grid
ax.grid(color='grey', linestyle='--', linewidth=0.5)
# Menampilkan plot
plt.show()
Output:
Di contoh ini, kita menggunakan metode tick_params dengan parameter labelsize untuk
mengatur ukuran tick sumbu. Ini memungkinkan kita untuk menyesuaikan tampilan plot
sesuai dengan kebutuhan.
3.5.6. Menambahkan Garis Horizontal dan Vertikal
Ada saatnya kamu mungkin ingin menambahkan garis horizontal atau vertikal ke plot untuk
menunjukkan ambang batas atau nilai referensi tertentu. Matplotlib menyediakan metode
sederhana untuk melakukannya.
# Membuat plot
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(x_line, y_line, marker='', linestyle='-')
# Menambahkan grid
ax.grid(color='grey', linestyle='--', linewidth=0.5)
# Menampilkan plot
plt.show()
Output:
Di sini, kita menambahkan garis horizontal dan vertikal menggunakan metode axhline dan
axvline. Parameter y dan x digunakan untuk menentukan posisi garis, sementara warna dan
gaya garis dapat disesuaikan sesuai kebutuhan.
Garis horizontal dan vertikal ini sering digunakan untuk menunjukkan ambang batas atau
nilai referensi dalam analisis ilmiah atau teknis.
3.6.1. Pengantar
Legenda adalah salah satu komponen terpenting dalam visualisasi data. Ini memungkinkan
pembaca untuk memahami apa yang direpresentasikan oleh masing-masing komponen
visual dalam plot. Seiring dengan legenda, kustomisasi tambahan pada plot dapat
meningkatkan estetika dan keterbacaan data visual. Mari kita jelajahi lebih dalam tentang
bagaimana kita bisa mengoptimalkan legenda dan melakukan kustomisasi tambahan pada
plot kita.
# Menambahkan legenda
ax.legend()
# Menampilkan plot
plt.show()
Output:
Seperti yang kamu lihat di atas, kita menambahkan label ke setiap garis saat memanggil
metode plot(). Kemudian, dengan memanggil metode legend(), kita bisa menampilkan
legenda yang menunjukkan label untuk setiap garis.
# Posisi tengah
axs[1, 1].plot(x_legend, y1_legend, label='sin(x)')
axs[1, 1].plot(x_legend, y2_legend, label='cos(x)')
axs[1, 1].legend(loc='center')
axs[1, 1].set_title('Posisi: Tengah')
plt.tight_layout()
plt.show()
Output:
Kamu bisa melihat bagaimana legenda diletakkan di berbagai posisi dalam plot. Dengan
parameter loc pada metode legend(), kita dapat dengan mudah mengatur posisi legenda.
Ada banyak pilihan posisi yang tersedia, seperti 'upper right', 'upper left', 'lower right', 'lower
left', 'center', dan banyak lagi.
3.6.2.3. Mengubah Ukuran dan Gaya Legenda
Mungkin kamu ingin mengubah ukuran teks atau gaya kotak legenda. Mari kita jelajahi
beberapa kustomisasi yang bisa kamu lakukan.
# Plot data
ax.plot(x_legend, y1_legend, label='sin(x)')
ax.plot(x_legend, y2_legend, label='cos(x)')
plt.show()
Output:
Dari contoh di atas, kamu bisa melihat bahwa kita telah mengubah ukuran teks legenda
dengan parameter fontsize, memberikan warna tepi dengan edgecolor, dan mengatur warna
latar belakang dengan facecolor. Selain itu, kita juga menambahkan judul ke legenda
dengan parameter title.
3.6.2.4. Legenda dengan Banyak Kolom
Jika kamu memiliki banyak entri legenda dan ingin menampilkannya dalam beberapa
kolom agar lebih rapi, kamu bisa menggunakan parameter ncol pada metode legend().
# Plot data
ax.plot(x_legend, y1_legend, label='sin(x)')
ax.plot(x_legend, y2_legend, label='cos(x)')
ax.plot(x_legend, y3_legend, label='sin(x + 0.5)')
ax.plot(x_legend, y4_legend, label='cos(x + 0.5)')
plt.show()
Output:
Dalam plot di atas, legenda telah dibagi menjadi dua kolom, membuat tampilan lebih rapi
dan kompak. Parameter ncol memungkinkan kamu mengontrol jumlah kolom dalam
legenda.
Contoh: Mengubah Ukuran dan Warna Teks Judul dan Label Sumbu
# Membuat plot dengan kustomisasi teks
fig, ax = plt.subplots(figsize=(8, 5))
# Plot data
ax.plot(x_legend, y1_legend, label='sin(x)')
ax.plot(x_legend, y2_legend, label='cos(x)')
# Menambahkan legenda
ax.legend()
plt.show()
Output:
Pada contoh di atas, kita menggunakan metode set_title untuk mengatur judul plot dengan
ukuran font dan warna kustom. Untuk label sumbu, kita menggunakan metode set_xlabel
dan set_ylabel. Hasilnya, kita mendapatkan plot dengan teks yang lebih menarik dan
informatif.
Output:
Dalam contoh di atas, kita menggunakan lima gaya plot berbeda dari yang tersedia di
Matplotlib. Dengan menggunakan context manager plt.style.context(style), kita bisa
menerapkan gaya tersebut ke setiap subplot. Ini memberi kita cara yang mudah untuk
mengeksplorasi dan menerapkan gaya yang berbeda untuk plot kita.
MODUL 4: Gaya dan Estetika
4.1. Menggunakan Style
Membuat plot yang informatif adalah hal penting, tetapi menambahkan sentuhan estetika
ke dalam plot membuatnya lebih menarik dan menyenangkan untuk dilihat. Dalam subbab
ini, kita akan menjelajahi cara menggunakan berbagai style yang tersedia dalam Matplotlib,
mengkustomisasi style sendiri, dan mengaplikasikan gaya yang berbeda untuk plot yang
berbeda. Kamu akan belajar bagaimana mengubah tampilan plot kamu dengan beberapa
baris kode sederhana.
Matplotlib menyediakan berbagai style yang dapat kamu gunakan, dan kamu juga dapat
membuat style kamu sendiri. Mari kita mulai dengan cara menggunakan style yang telah
disediakan.
Output:
['Solarize_Light2', '_classic_test_patch', '_mpl-gallery',
'_mpl-gallery-nogrid', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot']
# Data sintetis
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.tight_layout()
plt.show()
Output:
Dalam contoh di atas, kita menggunakan beberapa style yang berbeda untuk menggambar
plot yang sama. Dengan hanya satu baris kode tambahan untuk setiap plot, kita dapat
sepenuhnya mengubah tampilannya.
plt.rc(my_style)
Dalam contoh di atas, kita telah mendefinisikan berbagai pengaturan, termasuk lebar garis,
ukuran marker, ukuran label sumbu, dan warna.
# Mengaplikasikan style
with plt.rc_context(my_style):
plt.plot(x, y)
plt.title('Menggunakan Style Sendiri')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.grid(True)
plt.show()
Output:
Dalam contoh di atas, kita telah menggunakan style yang telah kita definisikan sendiri
untuk menggambar plot. Seperti yang kamu lihat, style ini memberikan tampilan yang
bersih dan rapi, dengan garis yang tebal, marker berbentuk lingkaran, dan grid yang halus.
Semua ini dapat dikustomisasi sesuai keinginan kamu.
Kamu bisa menerapkannya dengan menggunakan fungsi plt.set_cmap. Mari kita coba plot
heatmap dengan palet ʻviridisʼ dan ʻplasmaʼ:
# Generating a 2D grid of values
x = np.linspace(0, 4 * np.pi, 100)
y = np.linspace(0, 4 * np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)
plt.tight_layout()
plt.show()
Output:
4.2.3. Membuat Palet Warna Sendiri
Terkadang, palet bawaan mungkin tidak sesuai dengan kebutuhan kamu. Dalam hal ini,
kamu dapat membuat palet warna sendiri. Berikut adalah contoh cara membuat palet
warna dengan tiga warna:
from matplotlib.colors import ListedColormap
plt.tight_layout()
plt.show()
Output:
tips = sns.load_dataset('tips')
sns.boxplot(x='day', y='total_bill', data=tips, palette='pastel')
plt.title('Boxplot dengan Palet Warna "pastel"')
plt.show()
Output:
Boxplot di atas menggunakan palet warna "pastel," yang menyediakan kontras lembut antara
kategori yang berbeda. Dalam kasus ini, setiap hari diberi warna yang berbeda, memungkinkan
kamu untuk dengan mudah membedakan antara mereka.
Output:
Stripplot di atas menggunakan palet warna kustom yang didefinisikan dengan warna spesifik.
Warna-warna ini memberikan tampilan yang sangat berbeda dari palet bawaan, dan bisa
menjadi cara yang efektif untuk menekankan aspek tertentu dari data kamu.
Warna dalam palet ini didefinisikan dalam format hexadecimal, memberikan kontrol penuh
atas warna yang digunakan. Dengan cara ini, kamu dapat menyesuaikan plot dengan merek atau
tema visual lainnya yang relevan dengan proyek kamu.
1. Tema Darkgrid
Ini adalah tema default dari Seaborn. Tema ini menampilkan latar belakang gelap dengan
garis-garis grid putih, membuat data kamu menonjol dengan baik.
sns.set_style("darkgrid")
sns.lineplot(data=data_tips_sintetis, x='day', y='total_bill')
plt.title('Tema Darkgrid')
plt.show()
Output:
Seperti yang dapat kamu lihat, tema "darkgrid" menawarkan latar belakang gelap dengan
garis-garis grid putih, yang menonjolkan data dengan baik. Ini sangat berguna ketika kamu
ingin menekankan data daripada elemen-elemen lain dari plot.
2. Tema Whitegrid
Tema ini hampir mirip dengan "darkgrid", tetapi dengan latar belakang yang lebih cerah.
Garis-garis grid tetap ada, tetapi dengan warna yang lebih gelap untuk menonjolkan data.
sns.set_style("whitegrid")
sns.lineplot(data=data_tips_sintetis, x='day', y='total_bill')
plt.title('Tema Whitegrid')
plt.show()
Output:
Tema "whitegrid" menghadirkan tampilan yang lebih cerah dan bersih. Garis-garis grid yang
gelap membantu dalam menginterpretasikan data dengan lebih mudah pada latar belakang
yang putih. Tema ini sangat cocok untuk presentasi atau laporan resmi di mana kamu ingin
tampilan yang lebih profesional.
3. Tema Dark
Tema ini menampilkan latar belakang yang gelap tanpa garis-garis grid. Ini memberikan
tampilan yang lebih minimalis, memfokuskan perhatian audiens sepenuhnya pada data.
sns.set_style("dark")
sns.lineplot(data=data_tips_sintetis, x='day', y='total_bill')
plt.title('Tema Dark')
plt.show()
Output:
4. Tema Ticks
Tema ini adalah variasi dari tema "white", tetapi dengan penambahan 'ticks' atau tanda di
sepanjang sumbu. Ini menambahkan sedikit detail visual tanpa mengganggu kesederhanaan
dari latar belakang putih.
sns.set_style("ticks")
sns.lineplot(data=data_tips_sintetis, x='day', y='total_bill')
plt.title('Tema Ticks')
plt.show()
Output:
Seperti yang kamu lihat, tema "ticks" menambahkan tanda kecil di sepanjang sumbu,
memberikan sedikit informasi tambahan tanpa mengorbankan kesederhanaan tampilan. Ini
cocok untuk situasi di mana kamu ingin memberikan sedikit konteks tambahan tanpa
mengganggu keseluruhan estetika.
data = pd.DataFrame({
'x': np.arange(10),
'y': np.sin(np.arange(10))
})
Untuk menambahkan bayangan pada garis, kita bisa menggunakan metode fill_between. Mari
kita coba:
plt.plot(data['x'], data['y'], lw=4, label='Sine Wave')
plt.fill_between(data['x'], data['y'], alpha=0.1)
plt.legend()
plt.title('Garis dengan Bayangan')
plt.show()
Output:
Untuk membuat bayangan pada batang, kita bisa menggunakan kombinasi dari bar dan barh.
Kode berikut akan menunjukkan cara melakukannya:
plt.bar(data_bar['Category'], data_bar['Value'], alpha=0.7)
plt.bar(data_bar['Category'], data_bar['Value'], alpha=0.1,
bottom=data_bar['Value'] - 1)
plt.title('Bar dengan Bayangan')
plt.show()
Output:
Kita berhasil menambahkan bayangan ke bawah setiap batang dalam diagram batang. Efek ini
memberikan sensasi kedalaman dan membuat plot terlihat lebih menarik.
4.4.2. Transparansi
Transparansi adalah cara lain untuk menambahkan nuansa visual ke dalam grafik. Ini bisa
sangat berguna ketika kamu memiliki banyak elemen yang saling tumpang tindih.
Kita bisa menggunakan parameter alpha untuk mengatur tingkat transparansi pada scatter plot:
plt.scatter(data_scatter['x'], data_scatter['y'], alpha=0.5)
plt.title('Scatter Plot dengan Transparansi')
plt.show()
Output:
Hasilnya adalah scatter plot dengan titik-titik yang semi-transparan. Dengan transparansi ini,
kita dapat melihat area mana yang memiliki titik yang saling tumpang tindih, sehingga
membantu dalam analisis data.
Output:
Dalam histogram ini, transparansi memungkinkan kita untuk melihat distribusi kedua set data
dalam ruang yang sama. Hal ini membantu kita dalam memahami bagaimana kedua distribusi
tersebut berinteraksi dan membantu dalam analisis lebih lanjut.
MODUL 5: Tips dan Trik Lanjutan
5.1. Mengoptimalkan Performa
Visualisasi data adalah seni dan sains yang memungkinkan kita untuk memahami dan
mengomunikasikan pola dalam data. Namun, saat kita berurusan dengan dataset yang
sangat besar, kita mungkin menemukan bahwa visualisasi yang kita ciptakan tidak hanya
memerlukan waktu lama untuk dihasilkan, tetapi juga bisa terasa lamban dan tidak
responsif. Dalam situasi ini, mengoptimalkan performa visualisasi kita menjadi sangat
penting.
Bagaimana Caranya?
Mari kita bahas beberapa teknik yang dapat digunakan untuk mengoptimalkan performa
visualisasi dengan Matplotlib.
np.random.seed(42)
N = 1000000
x = np.random.randn(N)
y = np.random.randn(N)
df_large = pd.DataFrame({'x': x, 'y': y})
Output:
Jika kita mencoba membuat plot scatter langsung dari data ini, kita akan menemukan
bahwa prosesnya sangat lambat. Solusinya adalah melakukan subsampling dari data. Mari
kita ambil sampel acak dari 1% dari data:
df_sampled = df_large.sample(frac=0.01)
Kemudian, kita bisa membuat plot scatter dari data yang sudah disampling:
import matplotlib.pyplot as plt
Output:
Dengan hanya mengambil sebagian kecil dari data, kita dapat secara signifikan
meningkatkan kecepatan plot tanpa kehilangan terlalu banyak informasi.
Kemudian kita bisa menggunakan library multiprocessing untuk melakukan plot secara
paralel:
from multiprocessing import Pool
def plot_histogram(data):
plt.hist(data, bins=50)
plt.show()
Dengan menggunakan paralelisme, kita dapat memanfaatkan semua core CPU untuk
mempercepat proses plotting.
x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
plt.plot(x, y)
mpld3.show()
plt.figure(figsize=(12, 6))
map = Basemap()
map.drawcoastlines()
plt.show()
Output:
tips = sns.load_dataset("tips")
sns.boxplot(x="day", y="total_bill", data=tips)
plt.show()
Output:
4. Plotly: Plot Interaktif
Plotly adalah perpustakaan yang menyediakan plot interaktif. Kamu bisa menggunakannya
bersama Matplotlib untuk membuat plot yang dapat di-zoom, di-drag, dan lainnya.
import plotly.express as px
Output:
5. Menggunakan Widgets untuk Interaksi
Kamu juga dapat menggunakan widgets untuk menambahkan interaksi ke plot kamu.
Misalnya, slider yang mengubah parameter dalam plot.
from ipywidgets import interact
def plot_func(frequency):
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(frequency * x)
plt.plot(x, y)
plt.show()
Output:
5.3. Sumber Daya Tambahan
5.3.3. Buku
Buku adalah sumber daya yang bagus untuk belajar dalam-dalam, dan beberapa buku
tentang Matplotlib dan visualisasi data adalah:
● "Storytelling with Data: A Guide to Visualizing Information for Impact" oleh Cole
Nussbaumer Knaflic.
Deskripsi singkat: Buku ini menekankan pada bagaimana menceritakan kisah
melalui visualisasi data dan bagaimana memilih visualisasi yang tepat untuk data
Anda.
● "The Visual Display of Quantitative Information" oleh Edward R. Tufte.
Deskripsi singkat: Salah satu klasik dalam bidang visualisasi data, buku ini
mengeksplorasi prinsip-prinsip desain grafis yang baik dan bagaimana
menerapkannya pada grafik statistik.
Ingat, visualisasi data adalah bidang yang kompleks dan dinamis. Terus eksplorasi, belajar,
dan praktik adalah kunci untuk menjadi ahli dalam bidang ini. Jangan ragu untuk
bereksperimen, bertanya, dan berkolaborasi dengan orang lain. Selamat berpetualang
dalam dunia visualisasi data!
Terimakasih