library(tidyverse) library(lubridate)
tickers <- c(“AAPL”,“AMD”,“MU”,“NIO”,“NVDA”,“PRPL”,“SNAP”,“TSLA”)
set.seed(42)
dates <- seq(as.Date(“2016-01-01”), as.Date(“2024-12-31”), by = “day”) %>% .[weekdays(.) %in% c(“Monday”,“Tuesday”,“Wednesday”,“Thursday”,“Friday”)]
df <- map_dfc(tickers, function(t) { price <- cumprod(1 + rnorm(length(dates), 0.0005, 0.02)) * 10 tibble(!!t := price) }) %>% mutate(Date = dates) %>% relocate(Date)
long_df <- df %>% pivot_longer(-Date, names_to = “Stock”, values_to = “Price”)
norm_df <- long_df %>% group_by(Stock) %>% mutate(NormPrice = Price / first(Price)) %>% ungroup()
p1 <- ggplot(norm_df, aes(x = Date, y = NormPrice, color = Stock)) + geom_line(size = 0.9) + theme_minimal(base_size = 14) + labs( title = “Normalized Stock Prices (2016–2024)”, x = “Date”, y = “Normalized price (Base = $1)” )
print(p1)
p2 <- ggplot(long_df, aes(Date, Price)) + geom_line(size = 0.8, color = “black”) + facet_wrap(~Stock, scales = “free_y”, ncol = 3) + # 3 columns works fine theme_bw(base_size = 13) + labs( title = “Sampled Stock Prices (Individual Tickers)”, x = “Date”, y = “Closing prices” )
print(p2)