Anggota
- Adi Pratama M0401241002
- Ni Kadek Arista Mahadewi M0401241031
- Muhammad Athaurahman M0401241082
- Ainur Roudlotul Jannah Firdaus M0401241028
- Desthio Rendiarto Akhmad M0401241080
- Mifta Indira Putri Wardini M0401241090
library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(readxl)
## Warning: package 'readxl' was built under R version 4.5.2
library(zoo)
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(plotly)
## Warning: package 'plotly' was built under R version 4.5.2
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
Data
data <- read_xlsx("C:\\Dokumen\\Kuliah IPB\\Semester 4\\Visualisasi Data\\Tugas Projek\\Data Gabungan.xlsx")
data
## # A tibble: 2,416 × 21
## Tanggal Terakhir Pembukaan Tertinggi Terendah Vol. `Perubahan%`
## <dttm> <dbl> <dbl> <dbl> <dbl> <chr> <dbl>
## 1 2026-02-20 00:00:00 8272. 8300. 8328. 8237. 40,03B -0.0003
## 2 2026-02-19 00:00:00 8274. 8357. 8376. 8252. 43,54B -0.0043
## 3 2026-02-18 00:00:00 8310. 8236. 8310. 8227. 45,90B 0.0119
## 4 2026-02-13 00:00:00 8212. 8240. 8252. 8171. 43,44B -0.0064
## 5 2026-02-12 00:00:00 8265. 8317. 8334. 8220. 37,94B -0.0031
## 6 2026-02-11 00:00:00 8291. 8153. 8291. 8118. 54,57B 0.0196
## 7 2026-02-10 00:00:00 8132. 8032. 8141. 8011. 37,45B 0.0124
## 8 2026-02-09 00:00:00 8032. 7970. 8032. 7863. 31,02B 0.0122
## 9 2026-02-06 00:00:00 7935. 7945. 8025. 7862. 31,22B -0.0208
## 10 2026-02-05 00:00:00 8104. 8155. 8214. 8103. 32,36B -0.0053
## # ℹ 2,406 more rows
## # ℹ 14 more variables: `Data Historis USD_IDR.Tanggal` <dttm>,
## # `Data Historis USD_IDR.Terakhir` <dbl>,
## # `Data Historis USD_IDR.Pembukaan` <dbl>,
## # `Data Historis USD_IDR.Tertinggi` <dbl>,
## # `Data Historis USD_IDR.Terendah` <dbl>, `Data Historis USD_IDR.Vol.` <chr>,
## # `Data Historis USD_IDR.Perubahan%` <dbl>, …
data_ab <- data %>%
arrange(Tanggal) %>%
group_by(year(Tanggal), month(Tanggal)) %>%
slice(1) %>%
ungroup()
data_filt <- data_ab %>%
filter(Tanggal >= as.Date("2020-01-02"),
Tanggal <= as.Date("2024-12-30"))
data_filt
## # A tibble: 60 × 23
## Tanggal Terakhir Pembukaan Tertinggi Terendah Vol. `Perubahan%`
## <dttm> <dbl> <dbl> <dbl> <dbl> <chr> <dbl>
## 1 2020-01-02 00:00:00 6284. 6313. 6317. 6264. 3,30B -0.0025
## 2 2020-02-03 00:00:00 5884. 5921. 5943. 5877. 3,50B -0.0094
## 3 2020-03-02 00:00:00 5361. 5455. 5491. 5355. 4,02B -0.0168
## 4 2020-04-01 00:00:00 4466. 4539. 4627. 4445. 4,18B -0.0161
## 5 2020-05-04 00:00:00 4605. 4716. 4716. 4576. 3,91B -0.0235
## 6 2020-06-02 00:00:00 4848. 4754. 4884. 4754. 7,31B 0.0198
## 7 2020-07-01 00:00:00 4914. 4905. 4929. 4886. 4,32B 0.0018
## 8 2020-08-03 00:00:00 5006. 5150. 5157. 4928. 8,38B -0.0278
## 9 2020-09-01 00:00:00 5311. 5238. 5311. 5219. 9,05B 0.0138
## 10 2020-10-01 00:00:00 4970. 4900. 4970. 4899 9,64B 0.0205
## # ℹ 50 more rows
## # ℹ 16 more variables: `Data Historis USD_IDR.Tanggal` <dttm>,
## # `Data Historis USD_IDR.Terakhir` <dbl>,
## # `Data Historis USD_IDR.Pembukaan` <dbl>,
## # `Data Historis USD_IDR.Tertinggi` <dbl>,
## # `Data Historis USD_IDR.Terendah` <dbl>, `Data Historis USD_IDR.Vol.` <chr>,
## # `Data Historis USD_IDR.Perubahan%` <dbl>, …
data_filt2 <- data %>%
filter(Tanggal >= as.Date("2020-01-02"),
Tanggal <= as.Date("2024-12-30"))
Time Series
ggplot(data_filt, aes(x = Tanggal, y = Terakhir)) +
geom_line(color = "blue") +
geom_point(color = "darkblue", size = 2) +
labs(
title = "Pergerakan IHSG",
x = "Waktu",
y = "IHSG"
) +
scale_x_date(date_labels = "%b %Y", date_breaks = "1 year") +
theme_minimal()

ggplot(data_filt, aes(x = Tanggal, y = `Data Historis USD_IDR.Terakhir`)) +
geom_line(color = "red") +
geom_point(color = "darkred", size = 2) +
labs(
title = "Pergerakan Nilai Tukar USD/IDR",
x = "Waktu",
y = "Kurs (IDR)"
) +
scale_x_date(date_labels = "%b %Y", date_breaks = "1 year") +
theme_minimal()

ggplot(data_filt, aes(x = Tanggal, y = `Data Historis CBOE Volatility Index.Terakhir`)) +
geom_line(color = "gray") +
geom_point(color = "black", size = 2) +
labs(
title = "Pergerakan Volatilitas",
x = "Waktu",
y = "Volatilitas"
) +
scale_x_date(date_labels = "%b %Y", date_breaks = "1 year") +
theme_minimal()

Time Series Dual Axis
# IHSG vs Nilai Tukar Rupiah
scale_factor <- max(data_filt$Terakhir, na.rm = TRUE) /
max(data_filt$`Data Historis USD_IDR.Terakhir`, na.rm = TRUE)
break_dates <- as.Date(c("2020-4-01",
"2023-10-02"))
ggplot(data_filt, aes(x = Tanggal)) +
geom_line(
aes(y = Terakhir, color = "IHSG"),
linewidth = 0.5
) +
geom_line(
aes(y = `Data Historis USD_IDR.Terakhir` * scale_factor,
color = "Nilai Tukar Rupiah"),
linewidth = 0.5
) +
scale_y_continuous(
name = "IHSG (dalam Rupiah)",
sec.axis = sec_axis(
~ . / scale_factor,
name = "Nilai Tukar Rupiah (dalam Rupiah)"
)
) +
labs(
title = "IHSG vs Nilai Tukar Rupiah",
x = "Tanggal",
color = "Variabel"
) +
scale_x_date(breaks = break_dates, date_labels = "%b %Y") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))

# Perubahan IHSG vs Nilai Tukar Rupiah
scale_factor <- max(data_filt$`Perubahan%`, na.rm = TRUE) /
max(data_filt$`Data Historis USD_IDR.Perubahan%`, na.rm = TRUE)
ggplot(data_filt, aes(x = Tanggal)) +
geom_line(
aes(y = `Perubahan%`, color = "IHSG"),
linewidth = 0.5
) +
geom_line(
aes(y = `Data Historis USD_IDR.Perubahan%` * scale_factor,
color = "Nilai Tukar Rupiah"),
linewidth = 0.5
) +
scale_y_continuous(
name = "Perubahan IHSG",
sec.axis = sec_axis(
~ . / scale_factor,
name = "Perubahan Nilai Tukar Rupiah"
)
) +
labs(
title = "Perubahan IHSG vs Nilai Tukar Rupiah",
x = "Tanggal",
color = "Variabel"
) +
scale_x_date(date_labels = "%b %Y", date_breaks = "1 year") +
theme_minimal()

## Pake Rumus
data_index <- data_filt %>%
arrange(Tanggal) %>%
mutate(
PerIHSG_Index = (`Perubahan%` / first(`Perubahan%`)) * 100,
PerUSD_Index = (`Data Historis USD_IDR.Perubahan%` /
first(`Data Historis USD_IDR.Perubahan%`)) * 100
)
scale_factor <- max(data_index$PerIHSG_Index, na.rm = TRUE) /
max(data_index$PerUSD_Index, na.rm = TRUE)
# Dual Axis
ggplot(data_index, aes(x = Tanggal)) +
geom_line(aes(y = PerIHSG_Index, color = "IHSG Index"), linewidth = 0.5) +
geom_line(aes(y = PerUSD_Index * scale_factor,
color = "USD/IDR Index"), linewidth = 0.5) +
scale_y_continuous(
name = "IHSG Index (Basis 100)",
sec.axis = sec_axis(~ . / scale_factor,
name = "USD/IDR Index (Basis 100)")
) +
labs(x = "Tanggal", color = "Variabel") +
scale_x_date(date_labels = "%b %Y", date_breaks = "1 year") +
theme_minimal()

# Satu Axis
ggplot(data_index, aes(x = Tanggal)) +
geom_line(aes(y = PerIHSG_Index, color = "IHSG")) +
geom_line(aes(y = PerUSD_Index, color = "USD/IDR")) +
theme_minimal()

Scatter Plot
# Scatter plot dasar
ggplot(data_filt2, aes(x = `Perubahan%`, y = `Data Historis USD_IDR.Perubahan%`)) +
geom_point(alpha = 0.5, # transparansi titik
color = "blue") + # warna titik
labs(title = "Hubungan Perubahan IHSG dan Nilai Tukar Rupiah",
x = "Perubahan IHSG",
y = "Perubahan Nilai Tukar") +
theme_minimal() +
geom_smooth(method = "lm", # menambahkan garis regresi linear
se = TRUE, # confidence interval
color = "red")
## `geom_smooth()` using formula = 'y ~ x'

Areal Plot
# Stacked area plot
data_index <- data_filt %>%
arrange(Tanggal) %>%
mutate(
PerIHSG_Index = (`Perubahan%` / first(`Perubahan%`)) * 100,
PerUSD_Index = (`Data Historis USD_IDR.Perubahan%` /
first(`Data Historis USD_IDR.Perubahan%`)) * 100
)
ggplot(data_index, aes(x = Tanggal, y = `Perubahan%`)) +
geom_area(position = "stack", alpha = 0.7) + # stack area
labs(title = "Area Plot: Perubahan IHSG",
x = "Waktu",
y = "Perubahan",
) +
theme_minimal() +
scale_fill_brewer(palette = "Set2")

ggplot(data_index, aes(x = Tanggal, y = `Data Historis USD_IDR.Perubahan%`)) +
geom_area(position = "stack", alpha = 0.7) + # stack area
labs(title = "Area Plot: Perubahan Nilai Tukar Rupiah",
x = "Waktu",
y = "Perubahan",
) +
theme_minimal() +
scale_fill_brewer(palette = "Set2")
