Skip to main content

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:

  1. Horizontal Bar Plot menggunakan ax.barh().
  2. Histogram menggunakan ax.hist().
  3. 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()​

FungsiOrientasiKategoriNilai
ax.bar()Vertikalxheight
ax.barh()Horizontalywidth

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()

matplotlib

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

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.

KarakteristikBar PlotHistogram
DataKategoriNumerik
TujuanMembandingkan kategoriMelihat distribusi
Sumbu XKategoriInterval nilai
BatangMewakili kategoriMewakili bins
ContohHarga produkDistribusi 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()

matplotlib

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:

ParameterFungsi
nrowsJumlah baris
ncolsJumlah kolom
indexPosisi 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()

matplotlib

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​

FungsiKegunaan
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 y pada barh().
  • Memahami parameter width pada barh().
  • 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 nrows dan ncols.
  • Menggunakan tuple unpacking untuk Axes.
  • Menggunakan fig.add_subplot().
  • Membedakan plt.subplots() dan add_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.