Horizontal Bar Plot, Histogram & Subplots
Pada materi sebelumnya kita telah mempelajari beberapa jenis visualisasi dasar menggunakan Matplotlib:
- Line Plot.
- Scatter Plot.
- Bar Plot.
Pada materi ini kita akan melanjutkan dengan tiga konsep penting:
- Horizontal Bar Plot menggunakan
ax.barh(). - Histogram menggunakan
ax.hist(). - Subplots untuk membuat beberapa visualisasi dalam satu Figure.
Ketiga konsep ini sangat berguna dalam Exploratory Data Analysis atau EDA.
Secara sederhana:
Matplotlib
│
├── Bar Plot
│
├── Horizontal Bar Plot
│
├── Histogram
│
└── Subplots
Horizontal Bar Plot
Pada materi sebelumnya kita telah menggunakan:
ax.bar()
untuk membuat bar plot vertikal.
Contohnya:
Harga
│
12│ █
10│ █ █
8│ █ █ █
│──────────────
A P C
Matplotlib juga menyediakan:
ax.barh()
untuk membuat horizontal bar plot.
Hasilnya kurang lebih:
Almond ██████████ 10
Peanut ████████ 8
Cashew ████████████ 12
Menggunakan ax.barh()
Sintaks dasar:
ax.barh(y, width)
Berbeda dengan ax.bar(), pada barh() kita menggunakan:
y
↓
Kategori
width
↓
Nilai / panjang batang
Sedangkan pada bar plot vertikal:
ax.bar(x, height)
menggunakan:
x
↓
Kategori
height
↓
Nilai / tinggi batang
Perbedaan bar() dan barh()
| Fungsi | Orientasi | Kategori | Nilai |
|---|---|---|---|
ax.bar() | Vertikal | x | height |
ax.barh() | Horizontal | y | width |
Secara visual:
ax.bar()
█
█ █
█ █ █
──────────
A B C
Sedangkan:
ax.barh()
A █████
B ███████
C ████
Menyiapkan Data Dictionary
Kita akan menggunakan data harga nut butter.
nut_butter_prices = {
"Almond butter": 10,
"Peanut butter": 8,
"Cashew butter": 12,
}
Dictionary tersebut memiliki:
Keys
↓
Nama produk
Values
↓
Harga
Kita dapat mengambil keys menggunakan:
nut_butter_prices.keys()
dan values menggunakan:
nut_butter_prices.values()
Mengubah keys() dan values() Menjadi List
Untuk penggunaan barh(), kita dapat mengubah data dictionary menjadi list.
list(nut_butter_prices.keys())
dan:
list(nut_butter_prices.values())
Contohnya:
categories = list(nut_butter_prices.keys())
prices = list(nut_butter_prices.values())
Sekarang:
categories
→ ["Almond butter", "Peanut butter", "Cashew butter"]
prices
→ [10, 8, 12]
Membuat Horizontal Bar Plot
Contoh lengkap:
import matplotlib.pyplot as plt
nut_butter_prices = {
"Almond butter": 10,
"Peanut butter": 8,
"Cashew butter": 12,
}
fig, ax = plt.subplots()
ax.barh(
list(nut_butter_prices.keys()),
width=list(nut_butter_prices.values())
)
ax.set(
title="Harga Nut Butter",
xlabel="Harga ($)",
ylabel="Jenis Nut Butter"
)
plt.show()

Memahami Parameter barh()
Perhatikan:
ax.barh(
list(nut_butter_prices.keys()),
width=list(nut_butter_prices.values())
)
Parameter pertama:
list(nut_butter_prices.keys())
menentukan kategori pada sumbu Y.
Parameter:
width=list(nut_butter_prices.values())
menentukan panjang masing-masing batang.
Secara sederhana:
Y Axis
↓
Kategori
X Axis
↓
Nilai
Kapan Menggunakan Horizontal Bar Plot?
Horizontal bar plot sangat berguna ketika:
- Nama kategori panjang.
- Banyak kategori yang harus dibandingkan.
- Label kategori sulit dibaca jika diletakkan secara horizontal.
- Kita ingin membandingkan ranking secara visual.
Contohnya:
Harga Produk
│
Almond Butter ██████████
Peanut Butter ████████
Cashew Butter ████████████
Nama kategori lebih mudah dibaca dibandingkan jika diputar atau dipadatkan pada sumbu X.
Histogram
Jenis visualisasi berikutnya adalah histogram.
Histogram digunakan untuk melihat distribusi data numerik dengan membagi rentang nilai ke dalam beberapa interval yang disebut bins.
Contoh sederhana:
Frekuensi
│
│ █
│ █ █
│ █ █ █
│ █ █ █ █
└────────────────
Nilai
Histogram berbeda dari bar plot.
Bar plot biasanya digunakan untuk:
Kategori → Nilai
Sedangkan histogram digunakan untuk:
Nilai numerik → Distribusi frekuensi
Membuat Data Acak dengan np.random.randn()
Untuk mempraktikkan histogram, kita dapat membuat data acak menggunakan:
np.random.randn()
Contoh:
x = np.random.randn(1000)
Kode tersebut menghasilkan 1000 nilai acak yang mengikuti distribusi normal standar.
Kita dapat memeriksa jumlah datanya:
print(x.size)
Hasil:
1000
Apa Itu Distribusi Normal?
Distribusi normal sering digambarkan sebagai bentuk seperti lonceng:
█
███████
█████████████
███████████████████
──────────────────────────
Distribusi normal memiliki nilai yang lebih banyak berada di sekitar pusat distribusi dibandingkan bagian ekstrem.
Namun, penting untuk memahami bahwa data nyata tidak selalu mengikuti distribusi normal.
Membuat Histogram dengan ax.hist()
Fungsi yang digunakan:
ax.hist()
Contoh: f
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(1000)
fig, ax = plt.subplots()
ax.hist(x)
plt.show()
Matplotlib akan membagi data ke dalam beberapa bins dan menghitung berapa banyak data yang masuk ke masing-masing interval.
Memahami Bins
Misalnya kita memiliki data:
1, 2, 3, 4, 5, 6, 7, 8, 9
Data dapat dibagi menjadi beberapa interval:
1–3
4–6
7–9
Kemudian dihitung jumlah data dalam setiap interval.
Secara konseptual:
Interval Frekuensi
1–3 ███
4–6 ███
7–9 ███
Histogram melakukan proses tersebut secara otomatis.
Mengatur Jumlah Bins
Jumlah bins dapat diatur menggunakan parameter:
bins
Contoh:
fig, ax = plt.subplots()
ax.hist(
x,
bins=20
)
plt.show()
Semakin banyak bins, interval menjadi semakin kecil.
Sebaliknya, semakin sedikit bins, interval menjadi lebih lebar.
Perbandingan:
Sedikit bins:
███
██████
████
Banyak bins:
█ ██ ███ ██ █ ███ ██
Pemilihan jumlah bins dapat memengaruhi cara distribusi data terlihat, sehingga perlu disesuaikan dengan ukuran dan karakteristik dataset.
Menambahkan Title dan Label Histogram
Contoh:
fig, ax = plt.subplots()
ax.hist(
x,
bins=20
)
ax.set(
title="Distribusi Data",
xlabel="Nilai",
ylabel="Frekuensi"
)
plt.show()
Sekarang grafik memiliki informasi yang lebih jelas.
Histogram dalam Exploratory Data Analysis
Histogram sangat berguna dalam EDA.
Kita dapat menggunakannya untuk melihat:
- Distribusi data.
- Penyebaran data.
- Konsentrasi nilai.
- Kemungkinan skewness.
- Nilai ekstrem.
- Bentuk distribusi.
Contohnya:
Dataset
↓
Histogram
↓
Distribusi
↓
Analisis karakteristik data
Histogram juga dapat membantu menentukan apakah suatu data terlihat:
Simetris
Skewed ke kanan
Skewed ke kiri
Bimodal
Memiliki outlier
Interpretasi tersebut tetap perlu dilakukan dengan hati-hati dan tidak hanya berdasarkan satu grafik.
Perbedaan Bar Plot dan Histogram
Bar plot dan histogram sama-sama menggunakan batang, tetapi tujuan dan datanya berbeda.
| Karakteristik | Bar Plot | Histogram |
|---|---|---|
| Data | Kategori | Numerik |
| Tujuan | Membandingkan kategori | Melihat distribusi |
| Sumbu X | Kategori | Interval nilai |
| Batang | Mewakili kategori | Mewakili bins |
| Contoh | Harga produk | Distribusi usia |
Contoh bar plot:
Produk A ███████
Produk B █████
Produk C █████████
Contoh histogram:
Frekuensi
│
│ ███
│ ███████
│ █████████
└──────────────
Nilai
Subplots
Terkadang kita ingin menampilkan beberapa visualisasi sekaligus.
Misalnya:
Line Plot
Scatter Plot
Bar Plot
Histogram
daripada membuat empat Figure terpisah, kita dapat menempatkannya dalam satu Figure menggunakan subplots.
Contoh:
Figure
┌───────────────┬───────────────┐
│ Line Plot │ Scatter Plot │
├───────────────┼───────────────┤
│ Bar Plot │ Histogram │
└───────────────┴───────────────┘
Membuat Grid Subplots
Kita dapat menggunakan:
plt.subplots()
dengan parameter:
nrows
ncols
Contoh:
fig, ax = plt.subplots(
nrows=2,
ncols=2
)
Artinya:
2 rows
×
2 columns
sehingga terdapat empat Axes.
Axes[0, 0] Axes[0, 1]
Axes[1, 0] Axes[1, 1]
Mengakses Axes dengan Tuple Unpacking
Jika kita mengetahui bahwa terdapat 2 × 2 Axes, kita dapat melakukan tuple unpacking:
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(
nrows=2,
ncols=2
)
Sekarang kita memiliki:
ax1 → posisi [0, 0]
ax2 → posisi [0, 1]
ax3 → posisi [1, 0]
ax4 → posisi [1, 1]
Kita dapat menggunakan masing-masing Axes untuk visualisasi yang berbeda.
Contoh Subplots 2 × 2
Gunakan data:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
nut_butter_prices = {
"Almond butter": 10,
"Peanut butter": 8,
"Cashew butter": 12,
}
Kemudian:
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(
nrows=2,
ncols=2,
figsize=(10, 5)
)
Axes Pertama - Line Plot
ax1.plot(x, x / 2)
Axes Kedua - Scatter Plot
ax2.scatter(
np.random.random(10),
np.random.random(10)
)
Axes Ketiga - Bar Plot
ax3.bar(
nut_butter_prices.keys(),
nut_butter_prices.values()
)
Axes Keempat - Histogram
ax4.hist(
np.random.randn(1000)
)
Kode lengkap:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
nut_butter_prices = {
"Almond butter": 10,
"Peanut butter": 8,
"Cashew butter": 12,
}
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(
nrows=2,
ncols=2,
figsize=(10, 5)
)
ax1.plot(x, x / 2)
ax2.scatter(
np.random.random(10),
np.random.random(10)
)
ax3.bar(
nut_butter_prices.keys(),
nut_butter_prices.values()
)
ax4.hist(
np.random.randn(1000)
)
plt.show()

Mengatur Judul Setiap Subplot
Kita dapat memberikan judul berbeda untuk setiap Axes.
ax1.set_title("Line Plot")
ax2.set_title("Scatter Plot")
ax3.set_title("Bar Plot")
ax4.set_title("Histogram")
Contoh:
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(
2,
2,
figsize=(10, 6)
)
ax1.plot(x, x / 2)
ax1.set_title("Line Plot")
ax2.scatter(
np.random.random(10),
np.random.random(10)
)
ax2.set_title("Scatter Plot")
ax3.bar(
nut_butter_prices.keys(),
nut_butter_prices.values()
)
ax3.set_title("Bar Plot")
ax4.hist(np.random.randn(1000))
ax4.set_title("Histogram")
plt.show()
Mengatur Ukuran Figure
Saat menggunakan banyak subplot, ukuran Figure biasanya perlu diperbesar.
Gunakan:
figsize=(10, 6)
Contoh:
fig, ax = plt.subplots(
2,
2,
figsize=(10, 6)
)
Ingat bahwa:
figsize=(width, height)
menggunakan satuan inch.
Pendekatan Kedua - plt.subplot()
Selain:
plt.subplots()
Matplotlib juga menyediakan:
plt.subplot()
Perhatikan perbedaannya:
plt.subplots()
↓
Membuat Figure + Axes
plt.subplot()
↓
Membuat / memilih satu subplot pada posisi tertentu
Sintaks:
plt.subplot(nrows, ncols, index)
Parameter:
| Parameter | Fungsi |
|---|---|
nrows | Jumlah baris |
ncols | Jumlah kolom |
index | Posisi subplot |
Index dimulai dari:
1
bukan 0.
Contoh plt.subplot()
Kita dapat membuat Figure:
fig = plt.figure(figsize=(10, 5))
Kemudian membuat subplot pertama:
ax1 = fig.add_subplot(2, 2, 1)
Subplot kedua:
ax2 = fig.add_subplot(2, 2, 2)
Strukturnya:
┌───────────────┬───────────────┐
│ 1 │ 2 │
├───────────────┼───────────────┤
│ 3 │ 4 │
└─────────────── ┴───────────────┘
Contoh:
fig = plt.figure(figsize=(10, 5))
ax1 = fig.add_subplot(2, 2, 1)
ax1.plot(x, x / 2)
ax2 = fig.add_subplot(2, 2, 2)
ax2.scatter(
np.random.random(10),
np.random.random(10)
)
plt.show()
plt.subplots() vs add_subplot()
Keduanya dapat digunakan untuk membuat beberapa Axes.
Namun pendekatannya berbeda.
plt.subplots()
Contoh:
fig, ax = plt.subplots(2, 2)
Kita langsung mendapatkan kumpulan Axes.
Pendekatan ini biasanya lebih nyaman ketika struktur layout sudah diketahui sejak awal.
fig.add_subplot()
Contoh:
fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
Kita membuat atau menambahkan Axes satu per satu.
Pendekatan ini berguna ketika kita ingin mengelola Axes secara bertahap.
Mana yang Digunakan?
Untuk workflow umum, kita akan lebih sering menggunakan:
fig, ax = plt.subplots()
atau:
fig, ax = plt.subplots(
nrows=2,
ncols=2
)
Karena struktur Figure dan Axes dapat dibuat dengan jelas sejak awal.
Sedangkan add_subplot() tetap penting untuk dipahami karena akan sering ditemukan dalam kode dan dokumentasi Matplotlib.
Contoh Workflow Lengkap
Berikut contoh yang menggabungkan seluruh materi:
import numpy as np
import matplotlib.pyplot as plt
# Data
x = np.linspace(0, 10, 100)
nut_butter_prices = {
"Almond butter": 10,
"Peanut butter": 8,
"Cashew butter": 12,
}
# Membuat Figure dan 4 Axes
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(
nrows=2,
ncols=2,
figsize=(12, 8)
)
# Line Plot
ax1.plot(x, x**2)
ax1.set_title("Line Plot")
# Scatter Plot
ax2.scatter(x, np.sin(x))
ax2.set_title("Scatter Plot")
# Horizontal Bar Plot
ax3.barh(
list(nut_butter_prices.keys()),
width=list(nut_butter_prices.values())
)
ax3.set_title("Horizontal Bar Plot")
# Histogram
ax4.hist(np.random.randn(1000))
ax4.set_title("Histogram")
# Menampilkan Figure
plt.show()

Hasilnya merupakan satu Figure dengan empat jenis visualisasi.
Mengapa Subplots Berguna dalam EDA?
Dalam Exploratory Data Analysis, kita sering ingin membandingkan beberapa visualisasi.
Misalnya:
Figure
│
├── Distribusi data
├── Hubungan variabel
├── Perbandingan kategori
└── Tren data
Dengan subplot, semua informasi tersebut dapat ditampilkan dalam satu Figure.
Hal ini membantu kita mendapatkan gambaran dataset secara lebih menyeluruh.
Tips Membuat Subplots
Gunakan Ukuran Figure yang Cukup
Jika jumlah subplot banyak, gunakan ukuran Figure yang lebih besar.
Contoh:
fig, ax = plt.subplots(
2,
2,
figsize=(12, 8)
)
Berikan Judul
Setiap subplot sebaiknya memiliki konteks yang jelas.
ax1.set_title("Distribusi Harga")
ax2.set_title("Hubungan X dan Y")
Hindari Informasi yang Terlalu Padat
Jika terlalu banyak grafik ditempatkan dalam satu Figure, grafik dapat menjadi sulit dibaca.
Lebih banyak subplot tidak selalu berarti visualisasi lebih baik.
Fokus pada pertanyaan analisis yang ingin dijawab.
Ringkasan
Pada materi ini kita mempelajari tiga konsep utama.
Horizontal Bar Plot
Menggunakan:
ax.barh(y, width)
Digunakan untuk membuat bar plot horizontal.
Histogram
Menggunakan:
ax.hist(x)
Digunakan untuk melihat distribusi data numerik.
Subplots
Menggunakan:
fig, ax = plt.subplots(
nrows,
ncols
)
Digunakan untuk membuat beberapa Axes dalam satu Figure.
Cheat Sheet
Horizontal Bar Plot
fig, ax = plt.subplots()
ax.barh(
categories,
width=values
)
plt.show()
Histogram
fig, ax = plt.subplots()
ax.hist(data)
plt.show()
Subplots
fig, ax = plt.subplots(
nrows=2,
ncols=2
)
Tuple Unpacking
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(
2,
2
)
add_subplot()
fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
Fungsi yang Perlu Diingat
| Fungsi | Kegunaan |
|---|---|
ax.bar() | Bar plot vertikal |
ax.barh() | Bar plot horizontal |
ax.hist() | Histogram |
plt.subplots() | Membuat Figure dan Axes |
fig.add_subplot() | Menambahkan Axes ke Figure |
np.random.randn() | Menghasilkan sampel acak dari distribusi normal standar |
np.linspace() | Membuat angka yang berjarak merata |
Checklist Pembelajaran
Setelah menyelesaikan materi ini, Anda seharusnya dapat:
- Menjelaskan perbedaan bar plot dan horizontal bar plot.
- Menggunakan
ax.barh(). - Memahami parameter
ypadabarh(). - Memahami parameter
widthpadabarh(). - Mengubah dictionary keys dan values menjadi list.
- Membuat histogram menggunakan
ax.hist(). - Menjelaskan konsep bins.
- Mengatur jumlah bins menggunakan
bins. - Menjelaskan fungsi histogram dalam EDA.
- Membedakan histogram dan bar plot.
- Membuat beberapa Axes dalam satu Figure.
- Menggunakan
plt.subplots(). - Memahami parameter
nrowsdanncols. - Menggunakan tuple unpacking untuk Axes.
- Menggunakan
fig.add_subplot(). - Membedakan
plt.subplots()danadd_subplot(). - Mengatur ukuran Figure menggunakan
figsize. - Membuat Figure yang berisi beberapa jenis visualisasi.
Latihan
Latihan 1 - Horizontal Bar Plot
Gunakan data:
programming_languages = {
"Python": 95,
"JavaScript": 85,
"Java": 75,
"C++": 65,
}
Buat horizontal bar plot.
Tambahkan:
- Title.
- X label.
- Y label.
Latihan 2 - Histogram
Buat 1000 data acak:
data = np.random.randn(1000)
Kemudian buat histogram dengan:
bins=20
Tambahkan:
- Title.
- X label.
- Y label.
Latihan 3 - Membandingkan Bins
Gunakan dataset yang sama.
Buat tiga histogram dengan jumlah bins:
10
20
50
Bandingkan bagaimana perubahan jumlah bins memengaruhi tampilan distribusi.
Latihan 4 - Subplots
Buat Figure dengan layout:
2 × 2
Isi dengan:
Line Plot
Scatter Plot
Bar Plot
Histogram
Berikan title untuk setiap subplot.
Latihan 5 - EDA Mini
Buat sebuah dataset numerik menggunakan NumPy.
Kemudian tampilkan dalam satu Figure:
┌───────────────────┬───────────────────┐
│ Line Plot │ Scatter Plot │
├────────── ─────────┼───────────────────┤
│ Bar Plot │ Histogram │
└───────────────────┴───────────────────┘
Kemudian jelaskan informasi apa yang dapat diperoleh dari masing-masing visualisasi.