Data Numerik

Visualisasi data adalah salah satu teknik penting dalam analisis data yang memungkinkan kita memahami pola, distribusi, dan hubungan dalam suatu dataset. Dengan menggunakan berbagai jenis grafik, dapat dengan mudah menginterpretasikan informasi yang mungkin sulit dipahami hanya melalui angka atau tabel.Berikut adalah beberapa metode visualisasi data yang digunakan untuk memvisualisasikan data numerik :

  1. Histogram
  2. Density Plot
  3. Boxplot
  4. Scatter plot
  5. QQ- Plot
  6. Line chart
  7. Area Plot
  8. Multiple Line Chart

Input Data

library(MASS) menyediakan beberapa dataframe yang dapat digunakan untuk latihan. Salah satu dataframe yang disediakan adalah Cars93, yaitu data tentang 93 Mobil yang Dijual di Amerika Serikat pada tahun 1993 .

library(MASS)
library(ggplot2)
data(Cars93)
head(Cars93)
dim(Cars93)
## [1] 93 27

Histogram

Untuk membuat histogram pada package {ggplot2} menggunakan perintah geom_histogram(). Variable yang digunakan yaitu Length pada data Cars93.

ggplot(data = Cars93, mapping = aes(x = Length)) + 
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(data = Cars93, mapping = aes(x = Length)) + 
  geom_histogram(bins = 50)

Kita dapat memberikan pemisah dengan warna putih Anda dapat tambahkan argumen color = "white". Hasilnya sebagai berikut.

ggplot(data = Cars93, mapping = aes(x = Length)) + 
  geom_histogram(bins = 50, color = "white")

Kita dapat mengubah warna batang dengan menggunakan argumen fill, mengubah format penulisan nilai pada sumbu x dan y menggunakan function scale_x_continuous() untuk sumbu x dan scale_y_continuous() untuk sumbu y dan mengubah nama label pada sumbu x dan y dengan fungsi labs. Hasilnya sebagai berikut.

library(scales)
ggplot(data = Cars93, mapping = aes(x = Length)) + 
  geom_histogram(bins = 50, color = "black", fill = "bisque") + 
  scale_x_continuous(labels = comma) + 
  scale_y_continuous(labels = comma) + 
  labs(x = "Panjang Mobil", 
       y = "Frekuensi")

Density Plot

Untuk membuat density plot menggunakan ggplot2 kita cukup menggunakan function geom_density()

ggplot(data = Cars93, mapping = aes(x = Length)) + 
  geom_density()

ggplot(data = Cars93, mapping = aes(x = Length)) + 
  geom_density(fill = "pink", alpha = 0.7) + 
  scale_x_continuous(labels = comma) + 
  scale_y_continuous(labels = comma) + 
  labs(x = "Panjang Mobil")

Kita dapat membandingkan sebaran menggunakan density plot berdasarkan kategori. Misal akan dilihat sebaran Panjang Mobil (Length) berdasarkan kategori type mobil (Type). Hasilnya sebagai berikut.

ggplot(data = Cars93, mapping = aes(x = Length, fill = Type, color = Type)) + 
  geom_density(alpha = 0.7) + 
  scale_x_continuous(labels = comma) + 
  scale_y_continuous(labels = comma) + 
  labs(x = "Panjang Mobil")

Untuk mengurangi kesulitan dalam mengamati visual tersebut maka perlu dipisah per kategori dengan menggunakan visualisasi ridgeline plot atau disebut juga joyplot.

library(ggridges)
ggplot(data = Cars93, mapping = aes(x = Length, y= Type,fill = Type)) + 
  geom_density_ridges() + 
  labs(x = "Panjang Mobil", y = "Type Mobil")
## Picking joint bandwidth of 3.79

Box Plot

Untuk membuat boxplot di ggplot2 kita dapat gunakan function geom_boxplot()

ggplot(data = Cars93, mapping = aes(x = Length)) + 
  geom_boxplot()

Membuat boxplot secara vertikal menggunakan perintah coord_flip(). coord_flip() dalam ggplot2 digunakan untuk membalik sumbu X dan Y pada grafik. Hasilnya sebagai berikut.

ggplot(data = Cars93, mapping = aes(x = Length)) + 
  geom_boxplot()+
  coord_flip()

kita dapat membuat boxplot dari data numerik dan membandingkan sebarannya berdasarkan kategori. Misalnya kita ingin membandingkan sebaran Panjang Mobil (Length) berdasarkan Berat pada mobil (Width). Hasilnya sebagai berikut.

ggplot(data = Cars93, mapping = aes(x = Length, y = Width)) + 
  geom_boxplot()

Selanjutnya memberi warna berbeda untuk setiap box berdasarkan kategorinya. Dapat digunakan dengan menambahkan argumen fill dengan nilai berupa nama variabel dari kategori yang ingin kita gunkan untuk perbandingan boxplot. Contohnya pada data ini membandingkan sebaran dari variabel Panjang Mobil (Length) berdasarkan typenya (Type) menggunakan boxplot dan menyesuaikan warnanya berdasarkan kategori dari Type. Hasilnya sebagai berikut.

ggplot(data = Cars93, mapping = aes(x = Length, y = Type, fill = Type)) + 
  geom_boxplot()

Untuk menghilangkan legend dari color kita dapat tambahkan theme(legend.position = “none”).Hasilnya sebagai berikut.

ggplot(data = Cars93, mapping = aes(x = Length, y = Type, fill = Type)) + 
  geom_boxplot() + 
  theme(legend.position = "none")

Violin Plot

Plot ini dibentuk dengan menggabungkan antara Density Plot dengan boxplot. Hasilnya sebagai berikut.

ggplot(data = Cars93, mapping = aes(x = Length,y="all")) + # digunakan untuk memenuhi proporsi violin (bisa bebas)
  geom_violin(fill="pink",alpha=0.3) +
  geom_boxplot(fill="skyblue",width=0.1)

QQ-Plot

Plot ini berguna untuk memeriksa apakah sebaran data (sebaran empirik) memiliki bentuk yang sama dengan sebaran tertentu yang dispesifikan (sebaran hipotetik). Pada data ini misal ingin melihat pola sebaran Panjang Mobil (Length) apakah menyebar normal atau tidak.

ggplot(data = Cars93, aes(sample = Length)) +
  stat_qq(col="purple1", cex=2.5) +
  stat_qq_line(col="orange", lwd=1)

Scatter plot

Untuk membuat scatter plot menggunakan ggplot2 kita dapat menggunakan geom_point(). Misalnya kita ingin melihat pola sebaran antara Length dan Width.

ggplot(data = Cars93, mapping = aes(x = Length, y = Width)) + 
  geom_point()

Kita juga dapat memberikan warna untuk setiap titik. Misalnya warna masing-masing titik menyesuaikan dengan kategori pada variabel Type.

ggplot(data = Cars93, mapping = aes(x = Length, y = Width, color = Type)) + 
  geom_point()

Dalam pembuatan visualisasi line chart disini saya menggunakan data NVIDIA Stock Volatility (2014–2024). Dataset ini menyediakan data harga saham harian untuk NVIDIA (NVDA) dari Januari 2014 hingga Maret 2024, termasuk indikator volatilitas utama. Data ini bersumber dari Yahoo Finance (yfinance) yang saya ambil dari sebuah website yang bernama kaggle.

Line chart

Plot ini digunakan untuk melihat trend data berdasarkan perubahan waktu. Artinya pada Line Chart cocok untuk data-data deret waktu.

Input Data

library(readxl)
setwd("C:/Users/Acer/OneDrive - untirta.ac.id/Kuliah/MK/SEMESTER 4/Eksplorasi dan Visualisasi Data")
NVIDIA <- read.csv("NVIDIA_Stock_Volatility_2014_2024.csv")
head(NVIDIA)
NVIDIA$Date <- as.Date(NVIDIA$Date, format="%Y-%m-%d")
head(NVIDIA)
str(NVIDIA)
## 'data.frame':    2541 obs. of  12 variables:
##  $ Date              : Date, format: "2014-01-31" "2014-02-03" ...
##  $ Close             : num  0.37 0.365 0.367 0.364 0.369 ...
##  $ High              : num  0.372 0.373 0.368 0.366 0.37 ...
##  $ Low               : num  0.365 0.364 0.363 0.361 0.364 ...
##  $ Open              : num  0.365 0.373 0.365 0.365 0.365 ...
##  $ Volume            : num  3.35e+08 4.32e+08 2.81e+08 2.15e+08 1.68e+08 ...
##  $ Daily_Return      : num  -0.00127 -0.01338 0.00581 -0.00899 0.01295 ...
##  $ Rolling_Volatility: num  0.0163 0.0163 0.0161 0.0157 0.0156 ...
##  $ ATR               : num  0.00746 0.00729 0.00679 0.00684 0.00699 ...
##  $ Rolling_Mean      : num  0.373 0.373 0.372 0.372 0.371 ...
##  $ Upper_Band        : num  0.385 0.385 0.385 0.384 0.382 ...
##  $ Lower_Band        : num  0.361 0.36 0.36 0.359 0.36 ...

Line chart Dasar

ggplot(data = NVIDIA, aes(x = Date, y = Open)) +
  geom_line(color = "darkblue") +
  labs(title = "Pergerakan Harga Pembukaan Saham NVIDIA", 
       x = "Tahun", 
       y = "Harga Pembukaan (Open)") +
  theme_minimal()

Area Plot

Untuk menambah estetika dapat dilakukan dengan mengarsir daerah di bawah plot deret waktu. Plot seperti ini disebut Area Plot. Hasilnya sebagai berikut.

ggplot(data = NVIDIA, aes(x = Date, y = Open)) +
  geom_line(color = "navy", size = 1.2) +  # Garis utama
  geom_area(fill = "lightblue", alpha = 0.4) +  # Area bayangan
  labs(title = "📈 Pergerakan Harga Pembukaan Saham",
       x = "Tahun",
       y = "Harga Pembukaan (Open)") +
  theme_minimal()

Multiple Line Chart

Pada plot ini dapat digunakan untuk membandingkan trend data deret waktu pada beberapa wilayah/kelompok.

ggplot(data = NVIDIA, aes(x = Date)) +
  geom_line(aes(y = Open, color = "Harga Pembukaan (Open)"), size = 1.2) +
  geom_line(aes(y = Close, color = "Harga Penutupan (Close)"), size = 1.2, linetype = "dotted") +
  labs(title = "Pergerakan Harga Pembukaan dan Penutupan Saham NVIDIA",
       x = "Tahun",
       y = "Harga Saham") +
  scale_color_manual(values = c("Harga Pembukaan (Open)" = "yellow",  
                                "Harga Penutupan (Close)" = "#1E90FF")) +
  theme_classic()

Untuk menambahkan nama kelompok digunakan perintah berikut.

x = max(NVIDIA$Date) - 650 → Menempatkan teks 650 hari sebelum tanggal terakhir dalam data.

y = tail(NVIDIA$Open, 1) + 0.05 → Menempatkan teks sedikit di atas nilai harga pembukaan terakhir.

x = max(NVIDIA$Date) - 600 → Menempatkan teks 600 hari sebelum tanggal terakhir dalam data.

y = tail(NVIDIA$Close, 1) - 0.05 → Menempatkan teks sedikit di bawah harga penutupan terakhir.

ggplot(data = NVIDIA, aes(x=Date)) +
  geom_line(aes(y=Open), lwd=1, col="brown") +
  geom_line(aes(y=Close), lwd=1, col="coral") +
  xlim(min(NVIDIA$Date),max(NVIDIA$Date)+100) +
  geom_text(x=max(NVIDIA$Date)- 650,y=tail(NVIDIA$Open, 1) + 0.05,
            label="Harga Pembukaan", size = 4,
            color="brown", hjust = -0.2) +
    geom_text(x=max(NVIDIA$Date)- 600,y=tail(NVIDIA$Close, 1) - 0.05,
            label="Harga Penutupan", size = 4,
            color="coral",hjust = -0.2, vjust = -0.5) +
  labs(title = "Perbandingan Harga Pembukaan dan Penutupan Saham NVIDIA",
       x = "Tahun",
       y = "Harga Saham") +
theme_minimal()