Dokumen ini berisi visualisasi data harga saham menggunakan package ggplot2 pada R.
library(readr)
library(ggplot2)
library(ggpmisc)
NOK <- read_csv("Nokia ADR Stock Price History.csv",
locale = locale(decimal_mark = ","))
Boeing <- read_csv("Boeing Stock Price History.csv",
locale = locale(decimal_mark = ","))
JPM <- read_csv("JPMorgan Stock Price History.csv",
locale = locale(decimal_mark = ","))
dataNOK <- data.frame(Time = as.Date(NOK$Date, format = '%m/%d/%Y'), Price = NOK$Price)
dataBoeing <- data.frame(Time = as.Date(Boeing$Date, format = '%m/%d/%Y'), Price = Boeing$Price)
dataJPM <- data.frame(Time = as.Date(JPM$Date, format = '%m/%d/%Y'), Price = JPM$Price)
head(dataNOK)
## Time Price
## 1 2026-03-13 8240
## 2 2026-03-12 8140
## 3 2026-03-11 7900
## 4 2026-03-10 7800
## 5 2026-03-09 7890
## 6 2026-03-06 7740
head(dataBoeing)
## Time Price
## 1 2026-03-13 20989
## 2 2026-03-12 20476
## 3 2026-03-11 21410
## 4 2026-03-10 21776
## 5 2026-03-09 22500
## 6 2026-03-06 23111
head(dataJPM)
## Time Price
## 1 2026-03-13 28344
## 2 2026-03-12 28289
## 3 2026-03-11 28752
## 4 2026-03-10 28873
## 5 2026-03-09 28992
## 6 2026-03-06 28948
p11 <- ggplot(dataNOK, aes(x = Time, y = Price)) +
geom_line() +
xlab("Date") +
ylab("Price") +
ggtitle("Time Series Plot NOK") +
scale_x_date(date_labels = "%b %Y", date_breaks = "2 months") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 50, hjust = 1))+
geom_vline(xintercept = as.Date(c("2023-01-01", "2024-01-01", "2025-01-01", "2026-01
01")),
linetype = 2,
color = 2,
linewidth = 1)
p11
#NOK
p <- ggplot(dataNOK, aes(x = Time, y = Price)) +
geom_line() +
xlab("Date") +
ylab("Price")
p +
scale_x_date(date_labels = "%b %Y", date_breaks = "2 months") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 50, hjust = 1)) +
stat_peaks(geom = "point", span = 15, color = "steelblue3", size = 2) +
stat_peaks(geom = "label", span = 15, color = "steelblue3", angle = 0,
hjust = -0.1, x.label.fmt = "%d/%m/%y") +
stat_peaks(geom = "rug", span = 15, color = "blue", sides = "b") +
stat_valleys(geom = "point", span = 11, color = "red", size = 2) +
stat_valleys(geom = "label", span = 11, color = "red", angle = 0,
hjust = -0.1, x.label.fmt = "%Y-%m-%d") +
stat_valleys(geom = "rug", span = 11, color = "red", sides = "b")
p22 <- ggplot(dataBoeing, aes(x = Time, y = Price)) +
geom_line() +
xlab("Date") +
ylab("Price") +
ggtitle("Time Series Plot Boeing") +
scale_x_date(date_labels = "%b %Y", date_breaks = "2 months") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 50, hjust = 1))+
geom_vline(xintercept = as.Date(c("2023-01-01", "2024-01-01", "2025-01-01", "2026-01
01")),
linetype = 2,
color = 2,
linewidth = 1)
p22
#Boeing
p <- ggplot(dataBoeing, aes(x = Time, y = Price)) +
geom_line() +
xlab("Date") +
ylab("Price")
p +
scale_x_date(date_labels = "%b %Y", date_breaks = "2 months") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 50, hjust = 1)) +
stat_peaks(geom = "point", span = 15, color = "steelblue3", size = 2) +
stat_peaks(geom = "label", span = 15, color = "steelblue3", angle = 0,
hjust = -0.1, x.label.fmt = "%d/%m/%y") +
stat_peaks(geom = "rug", span = 15, color = "blue", sides = "b") +
stat_valleys(geom = "point", span = 11, color = "red", size = 2) +
stat_valleys(geom = "label", span = 11, color = "red", angle = 0,
hjust = -0.1, x.label.fmt = "%Y-%m-%d") +
stat_valleys(geom = "rug", span = 11, color = "red", sides = "b")
p33 <- ggplot(dataJPM, aes(x = Time, y = Price)) +
geom_line() +
xlab("Date") +
ylab("Price") +
ggtitle("Time Series Plot JPM") +
scale_x_date(date_labels = "%b %Y", date_breaks = "2 months") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 50, hjust = 1))+
geom_vline(xintercept = as.Date(c("2023-01-01", "2024-01-01", "2025-01-01", "2026-01
01")),
linetype = 2,
color = 2,
linewidth = 1)
p33
#JPM
p <- ggplot(dataJPM, aes(x = Time, y = Price)) +
geom_line() +
xlab("Date") +
ylab("Price")
p +
scale_x_date(date_labels = "%b %Y", date_breaks = "2 months") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 50, hjust = 1)) +
stat_peaks(geom = "point", span = 15, color = "steelblue3", size = 2) +
stat_peaks(geom = "label", span = 15, color = "steelblue3", angle = 0,
hjust = -0.1, x.label.fmt = "%d/%m/%y") +
stat_peaks(geom = "rug", span = 15, color = "blue", sides = "b") +
stat_valleys(geom = "point", span = 11, color = "red", size = 2) +
stat_valleys(geom = "label", span = 11, color = "red", angle = 0,
hjust = -0.1, x.label.fmt = "%Y-%m-%d") +
stat_valleys(geom = "rug", span = 11, color = "red", sides = "b")
#Multiple
dataJPM$Stock <- "JPM"
dataNOK$Stock <- "NOK"
dataBoeing$Stock <- "Boeing"
data_all<-rbind(dataNOK, dataBoeing, dataJPM)
ggplot(data_all, aes(x = Time, y = Price, color = Stock)) +
geom_line(size = 1) +
theme_minimal() +
theme(legend.position = "right") +
scale_x_date(date_labels = "%b %Y", date_breaks = "2 months") +
theme(axis.text.x = element_text(angle = 50, hjust = 1))+
geom_vline(xintercept = as.Date(c("2023-01-01", "2024-01-01", "2025-01-01", "2026-01
01")),
linetype = 2,
color = 2,
linewidth = 1)