Membuat Dual Y-Axis Line Plot


Pada tutorial singkat kali ini kita akan membuat line plot yang memiliki dual axis pada sumbu Y. Line plot dengan dua sumbu Y sangat bermanfaat untuk memvisualisasikan dua set data dengan skala berbeda pada satu grafik. Library yang akan digunakan adalah matplotlib dan seaborn.
Misalkan kita memiliki data jumlah impresi dan jumlah klik dari suatu website seperti kode di bawah ini:
Python
import numpy as np import pandas as pd data = pd.DataFrame({ "Hari" : np.arange(1, 8), "Impresi" : np.array([1031, 1262, 1363, 1137, 1512, 1070, 967]), "Klik" : np.array([91, 143, 82, 75, 120, 103, 96]) }) print(data)
Output
# Output Hari Impresi Klik 0 1 1031 91 1 2 1262 143 2 3 1363 82 3 4 1137 75 4 5 1512 120 5 6 1070 103 6 7 967 96
Jika ingin melihat pola pergerakan nilai kedua kolom sekaligus secara visual, maka dapat dibuat dalam bentuk lineplot. Untuk membuat lineplot kedua kolom tersebut dapat dilakukan seperti kode berikut ini:
Python
import matplotlib.pyplot as plt import seaborn as sns sns.set(style="white") data.index = data["Hari"] plt.subplots(figsize=(12, 6)) sns.lineplot(data=data[["Impresi", "Klik"]], palette=["#E17A47", '#4AB19D'], lw=3, markers=["o", "s"], markersize=15) plt.show()
Output


Pada contoh line plot di atas, kita menampilkan data kolom Impresi
dan Klik
pada satu grafik yang sama. Pada line untuk kolom Impresi
, kita dapat dilihat dengan jelas bagaimana pola pergerakan naik turunnya jumlah impresi dari hari pertama hingga hari ke tujuh. Sebagai contoh, kita dapat melihat kenaikan tajam pada hari ke-5 dibandingkan hari ke-4, serta penurunan yang tajam pada hari ke-6.
Namun tidak demikian dengan line untuk kolom Klik
. Pada line tersebut kita tidak dapat dengan jelas melihat bagaimana pola pergerakan dari hari ke hari untuk jumlah klik. Line yang ditampilkan terkesan datar, seolah tidak bergejolak seperti line Impresi
. Padahal, jika kita lihat nilainya perubahan nilainya sangat bergejolak, bahkan dapat dikatakan melebihi apa yang ada pada kolom Impresi
.
Informasi yang hilang ini dikarenakan ukuran nilai data pada kolom Klik
, jauh lebih kecil (sekitar 82-143) dibandingkan dengan nilai pada kolom impresi (sekitar 967-1512). Perbedaan skala yang besar ini menyebabkan perubahan pada kolom Klik
tidak dapat begitu terlihat jika ditampilkan pada skala yang jauh lebih besar.
Dual Y-Axis Plot
Cara yang lebih tepat jika ingin menyandingkan kedua data pada satu grafik adalah menggunakan dua sumbu Y (dual Y-axis). Data pertama akan menggunakan sumbu Y yang berada pada sisi kiri, sementara data kedua menggunakan sumbu Y pada sisi kanan. Dengan demikian kita dapat menyandingkan kedua data secara bersamaan dan memperoleh gambaran yang lebih lengkap mengenai kondisi data.
Penerapannya menggunakan matplotlib yaitu melalui method twinx
. Untuk plot yang dibuat menggunakan seaborn, maka kita perlu menentukan nilai parameter ax
. Berikut ini contoh penerapan dual Y-axis plot menggunakan data yang sama seperrti sebelumnya.
Python
sns.set(style="white") fig, ax_1 = plt.subplots(figsize=(12, 6)) # applies twinx pada ax_2 ax_2 = ax_1.twinx() # set ax = ax_1 untuk plot pertama sns.lineplot(x = data["Hari"], y = data["Impresi"], color = '#E17A47', ax = ax_1, lw=2.5, marker="s", markersize=10) # set ax = ax_2 untuk plot kedua sns.lineplot(x = data["Hari"], y = data["Klik"], color = '#4AB19D', ax = ax_2, marker='o', lw=2.5, markersize=10) # Menambahkan judul pada axis ax_1.set_xlabel('Hari') ax_1.set_ylabel('Impresi', color='#E17A47') ax_2.set_ylabel('Klik', color='#4AB19D') # Menambahkan judul Plot ax_1.set_title(label="Dual Y-Axis Plot", fontsize=16, color="#0E2433", pad=15) plt.show()
Output


Tidak seperti grafik sebelumnya, pada grafik di atas dapat dilihat bagaimana pola pergerakan kedua data yang semakin jelas. Khususnya pada kolom Klik
, perubahan nilai yang tadinya terlihat datar, pada plot ini menjadi sangat jelas bahwa nilai kolom Klik
memiliki pola perubahan nilai yang bergejolak dari waktu ke waktu.
Tulisan Lainnya