Kursus
Plotly bukan sekadar alat untuk membuat visualisasi yang indah; ini tentang membuka potensi penuh data Anda dan mengungkap wawasan yang mungkin tetap tersembunyi. Plotly adalah jembatan antara bahasa angka dan bahasa cerita, memberdayakan individu dan organisasi untuk mengambil keputusan yang tepat dan menciptakan perubahan yang bermakna.
Itulah bahasa yang digunakan ChatGPT untuk menggambarkan Plotly. Jelas, Plotly adalah salah satu pustaka visualisasi data terbaik yang ada.

Plotly menghasilkan bagan yang sangat interaktif dan menarik secara visual seperti contoh di bawah ini:
Hari ini, Anda akan mempelajari dasar-dasar membuat visual yang keren dengan Plotly.
Dasar-dasar Plotly Express
Seperti tutorial lainnya, kita mulai dengan memasang pustaka melalui pip (atau conda jika Anda lebih suka).
$ pip install --upgrade plotly
$ conda install -c conda-forge plotly
Plotly menerima pembaruan rutin, jadi pastikan tag --upgrade disertakan jika Anda sudah memasang pustakanya.
Tutorial ini berfokus pada API Express dari Plotly, yang diperkenalkan pada 2019, menawarkan banyak manfaat dibanding cara lama berinteraksi dengan pustaka inti Plotly:
- Sintaks sederhana (nyaris seperti bahasa Inggris)
- Ragam visualisasi yang luas (atau alat untuk membuat versi Anda sendiri)
- Skala sumbu dan warna otomatis
- Integrasi dengan pandas (Anda dapat menggunakan backend plotting Plotly untuk fungsi Pandas
.plot)
Berikut anatomi plot dasar di Plotly Express:
import plotly.express as px
fig = px.plotting_function(
dataframe,
x='column-for-xaxis',
y='column-for-yaxis',
title='Title For the Plot',
width=width_in_pixels,
height=height_in_pixels
)
fig.show()
Berbagai plot berada di bawah nama masing-masing, seperti histogram atau scatter pada modul express, yang dimuat sebagai px. Argumen pertama untuk fungsi plotting apa pun adalah dataframe serta nama kolom yang akan diplot untuk sumbu X dan Y.
Praktik terbaik menyarankan agar Anda memberi plot sebuah title yang informatif sehingga pembaca tahu apa yang ditampilkan.
Setelah fungsi plotting dijalankan, ia mengembalikan objek Figure, dan di atasnya Anda memanggil metode show untuk menampilkan plot di notebook Anda.
Untuk mulai membuat plot, kita memerlukan dataset. Untuk tutorial ini, kami menggunakan dataset Diamonds. Dataset ini berisi kombinasi fitur numerik dan kategorikal yang menarik—sempurna untuk tujuan artikel ini.
import pandas as pd
diamonds = pd.read_csv("data/diamonds.csv")
diamonds.head()

Dataset ini berisi lebih dari 53 ribu berlian dengan 10 karakteristik fisik. Anda dapat menelusuri statistik dasar data di bawah ini.
diamonds.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53940 entries, 0 to 53939
Data columns (total 10 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 carat 53940 non-null float64
1 cut 53940 non-null object
2 color 53940 non-null object
3 clarity 53940 non-null object
4 depth 53940 non-null float64
5 table 53940 non-null float64
6 price 53940 non-null int64
7 x 53940 non-null float64
8 y 53940 non-null float64
9 z 53940 non-null float64
dtypes: float64(6), int64(1), object(3)
memory usage: 4.1+ MB
diamonds.describe()
Salah satu hal pertama saat melakukan Analisis Data Eksploratif (EDA) adalah menelusuri distribusi individual.
Plotly menawarkan banyak bagan untuk tugas ini: histogram, boxplot, violin plot, bar chart, dan lain-lain. Mari kita lihat beberapa di antaranya.
Histogram di Plotly Express
Histogram mungkin adalah visual pertama yang dipelajari banyak orang.
Histogram mengurutkan nilai sebuah distribusi dan menempatkannya ke dalam bin. Lalu, batang digunakan untuk merepresentasikan berapa banyak nilai yang masuk ke tiap bin:
import plotly.express as px
fig = px.histogram(
diamonds,
x="price",
title="Histogram of diamond prices",
width=600,
height=400,
)
fig.show()

Jika Anda mengarahkan kursor ke batang mana pun, Anda dapat melihat rentang bin yang sesuai. Plotly secara otomatis menentukan jumlah bin, tetapi jika Anda ingin mengaturnya sendiri, Anda dapat menggunakan parameter nbins.
Namun, sulit menemukan jumlah bin yang tepat untuk setiap distribusi. Karena itu, Anda dapat menggunakan praktik umum dengan menyamakan jumlah bin dengan akar kuadrat dari panjang distribusi:
# Temukan jumlah bin yang tepat
nbins = int(len(diamonds) ** (1 / 2))
fig = px.histogram(
diamonds,
x="price",
title="Histogram of diamond prices",
nbins=nbins,
width=600,
height=400,
)
fig.show()
Bar chart di Plotly Express
Histogram menganalisis fitur kuantitatif. Untuk menganalisis data kategorikal, kita beralih ke bar chart. Misalnya, dengan memasukkan kolom kategorikal cut ke fungsi histogram, kita mendapatkan jenis bar chart yang disebut countplot. Benar, sesuai dugaan Anda—countplot menghitung jumlah observasi di setiap kategori.
fig = px.histogram(diamonds, x="cut")
fig.show()

Tapi tunggu, kita belum memberi label apa pun pada plot! Mari perbaiki dengan fungsi update_layout, yang dapat memodifikasi banyak aspek figure setelah dibuat.
fig.update_layout(
title="The number of diamonds in each diamond cut category",
xaxis_title="",
yaxis_title="Count",
)

Anda sudah tahu apa yang dilakukan title. xaxis_title dan yaxis_title mengganti label kedua sumbu yang dihasilkan Plotly (yang pada dasarnya adalah nama kolom).
Sekarang, mari lihat harga rata-rata untuk setiap kategori potongan berlian. Pertama, kita gunakan groupby dari pandas:
mean_prices = (
diamonds.groupby("cut")["price"].mean().reset_index()
)
mean_prices

Menggabungkan fungsi reset_index di akhir operasi groupby mengubah keluaran menjadi DataFrame, dan Plotly sangat cocok dengan DataFrame. Jadi, mari kita teruskan ke fungsi bar:
fig = px.bar(mean_prices, x="cut", y="price")
fig.update_layout(
title="Average diamond prices for each cut category",
xaxis_title="",
yaxis_title="Mean price ($)",
)
fig.show()

bar menerima satu fitur kategorikal dan satu numerik, lalu membuat satu batang untuk setiap baris pada DataFrame yang diberikan. Hasilnya adalah perbandingan harga untuk tiap jenis berlian yang mudah dicerna.
Box plot di Plotly Express
Plot umum lainnya untuk menganalisis distribusi adalah boxplot, yang dibuat dengan box di Plotly Express:
fig = px.box(diamonds, x="clarity", y="carat")
fig.update_layout(
title="Distribution of diamond carats for each clarity category",
xaxis_title="Clarity",
yaxis_title="Carat",
)
fig.show()

Alih-alih membuat batang yang hanya menampilkan rata-rata karat berlian, boxplot menampilkan beberapa statistik:

Anda dapat melihat:
- Minimum/maksimum
- Median
- Persentil ke-25
- Persentil ke-75
- dan pencilan (outlier)
untuk setiap kategori kejernihan berlian.
Violin plot di Plotly Express
Bagan lain yang menyenangkan untuk mengeksplorasi distribusi adalah violin plot. Violin plot pada dasarnya adalah box plot dengan beberapa sentuhan tambahan:
fig = px.violin(diamonds, x="cut", y="price")
fig.show()

Alih-alih menampilkan kotak, violin plot menunjukkan kurva halus yang menyatakan kepadatan suatu fitur. Untuk menumpuk box plot di dalamnya, Anda dapat menyetel atribut box ke True:
fig = px.violin(diamonds, x="cut", y="price", box=True)
fig.show()

Tidak seperti box plot yang hanya menampilkan statistik ringkas, violin plot juga menampilkan bentuk distribusi.
Memvisualisasikan hubungan antar fitur di Plotly Express
Anda mulai melihat pola dan wawasan baru saat memplot fitur yang saling berkaitan. Misalnya, jika kita berasumsi bahwa karat (berat) berlian adalah faktor utama penentu harganya, mari telusuri hubungan tersebut.
Scatterplot di Plotly Express
Kita dapat menggunakan scatterplot (px.scatter) yang memplot semua berlian dalam dataset sebagai titik. Posisi titik ditentukan oleh nilai harga dan karatnya masing-masing:
fig = px.scatter(diamonds, x="price", y="carat")
fig.update_layout(
title="Price vs. Carat",
xaxis_title="Price ($)",
yaxis_title="Carat",
)
fig.show()

Kita menghadapi kasus overplotting, yang terjadi ketika terlalu banyak data ditampilkan dalam satu plot. Alih-alih menunjukkan pola dan tren sebenarnya, overplotting justru menutupinya.
Kita bisa mengatasinya dengan memplot hanya ~10% dari dataset, yang cukup untuk mengungkap pola yang ada:
fig = px.scatter(
diamonds.sample(5000), x="price", y="carat"
)
fig.update_layout(
title="Price vs. Carat",
xaxis_title="Price ($)",
yaxis_title="Carat",
)
fig.show()

Pada pemanggilan scatter, kita hanya meneruskan 5000 baris (.sample(5000)), yang menunjukkan tren naik ringan pada hubungan harga–karat.
Heatmap di Plotly Express
Heatmap sangat bagus untuk memvisualisasikan dataset yang kompleks, seperti matriks besar di mana sulit melihat pola dari sekumpulan angka di sel.
Heatmap menetapkan warna berdasarkan besaran setiap sel dalam matriks. Salah satu skenario yang berguna adalah melihat matriks korelasi sebuah dataset.
Korelasi mengukur hubungan linear antar fitur numerik. Jadi, setiap sel pada matriks korelasi merepresentasikan korelasi antara sepasang fitur.
Anda dapat menghitung matriks korelasi dataset apa pun menggunakan metode corr dari pandas, yang mengembalikan DataFrame. Jika Anda meneruskannya ke fungsi imshow dari Express, Anda akan mendapatkan heatmap:
import plotly.express as px
# Create heatmap using Plotly Express
fig = px.imshow(
diamonds.corr(),
color_continuous_scale="Inferno_r",
)
# Show plot
fig.show()

Nilai korelasi berkisar dari -1 hingga 1. Nilai yang mendekati tepi rentang menunjukkan hubungan linear positif atau negatif yang kuat antar fitur.
Kita memilih colormap Inferno terbalik untuk parameter color_continuous_scale. Anda dapat memilih colormap lain dari halaman skala warna pada dokumentasi Plotly.
Kustomisasi plot di Plotly Express
Salah satu keunggulan terbesar API Plotly Express adalah kemudahan kustomisasi plot.
Fungsi update_layout memiliki banyak parameter yang dapat Anda gunakan untuk memodifikasi hampir semua aspek bagan.
Bergantung pada tempat plot Anda akan ditampilkan, menjadi tugas Anda untuk membuatnya layak tampil di hadapan audiens, lokasi, atau media apa pun.
Salah satu hal pertama yang dipilih adalah tema plot. Tema di Plotly adalah konfigurasi bagan default yang mengendalikan hampir semua komponennya.
Anda dapat mengubahnya menggunakan parameter template pada fungsi plotting apa pun:
sample = diamonds.sample(3000)
fig = px.scatter(
sample, x="price", y="carat", template="ggplot2"
)
fig.show()

Beberapa yang populer adalah ggplot2, seaborn, plotly_dark, dan presentation. Anda dapat melihat daftar lengkapnya dengan memanggil plotly.io.templates.
Warna
Scatterplot kita sejauh ini bersifat dua dimensi. Namun kita bisa menambahkan informasi ekstra melalui warna.
Misalnya, kita dapat mewarnai setiap titik pada plot berdasarkan kategori berlian. Untuk melakukannya, Anda hanya perlu meneruskan cut ke parameter color:
sample = diamonds.sample(3000)
fig = px.scatter(sample, x="price", y="carat", color="cut")
fig.show()

Parameter cut juga menampilkan legenda pada plot, yang menunjukkan warna tiap kategori.
Ukuran marker
Pendekatan lain adalah menampilkan fitur numerik melalui ukuran titik.
Dengan menyetel parameter size ke carat, kita memperoleh titik dengan ukuran berbeda berdasarkan karat berlian:
fig = px.scatter(sample, x="price", y="x", size="carat")
fig.show()

Bagaimana jika kita gunakan warna dan ukuran sekaligus? Tentu bisa!
fig = px.scatter(
sample, x="price", y="x", size="carat", color="cut"
)
fig.show()

Namun plot ini kurang informatif karena memuat terlalu banyak informasi untuk diproses oleh mata. Praktik yang baik adalah tidak memadatkan lebih dari tiga fitur ke dalam satu plot.
Penutup
Selamat sudah sampai di akhir! Anda telah mempelajari cukup banyak dalam tutorial ini untuk melanjutkan belajar mandiri Plotly dari sumber kami yang lain:
- Kursus Introduction to data visualization with Plotly in Python
- Tutorial Data Visualization with Plotly in R
- Tutorial Creating histograms in Plotly
Anda juga dapat mempelajari API Graph Objects milik Plotly, untuk opsi kustomisasi lebih lanjut, kontrol penuh atas interaktivitas dan animasi, serta dukungan untuk tipe visualisasi tingkat lanjut.
