【发布时间】:2023-04-05 22:06:01
【问题描述】:
我正在尝试在ggplot、AAPL 和 MSFT 上绘制 2 个时间序列(指数股票价格)。我想遮蔽这两条线之间的区域,但前提是 AAPL 指数价格高于 MSFT 的价格。我该如何做到这一点?
我一直在阅读有关使用geom_ribbon() 的信息,但看到有人说这是有问题的,并且当两条线不交叉时不起作用。我也无法让代码正常工作。如何为geom_ribbon() 设置我的ymin 和ymax 值?我也试过geom_area(),但后来我创建的只是一个堆积面积图。
到目前为止,这是我的代码:
install.packages("tidyquant")
install.packages("ggplot2")
library(tidyquant)
library(ggplot2)
symbols <- c("AAPL", "MSFT")
data <- tq_get(symbols, get = "stock.prices", from = "2016-01-01")
S1_index <-data$adjusted[which(data$symbol == "AAPL" & data$date == min(data$date))]
S2_index <-data$adjusted[which(data$symbol == "MSFT" & data$date == min(data$date))]
data$adjusted <- ifelse(data$symbol == "AAPL", data$adjusted/S1_index,
ifelse(data$symbol == "MSFT", data$adjusted/S2_index,NA))
ggplot(data,aes(x=date, y=adjusted,colour= symbol)) +
geom_line() +
scale_colour_manual(values = c(AAPL = "darkblue", MSFT = "red")) +
ggtitle("Title Here") + xlab("X Axis Label Here") + ylab("Y Axis Label Here") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_x_date(date_labels = "%b %y", date_breaks = "6 months") +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank(), axis.line = element_line(colour = "black"))+
labs(color = "Company") +
theme(legend.title = element_blank())
当 AAPL 高于 MSFT 时,我希望两个时间序列之间的区域被遮蔽,但目前我的代码没有做到这一点。我对 ggplot 的使用不是很熟练,所以如果您有任何建议,我将不胜感激。
【问题讨论】:
-
我没有让你的代码的 tidyquant 部分工作。你能把
dput(head(data))的输出发给我们玩吗? -
这里是我的数据文件的链接:dropbox.com/s/a0mgpat42cwrtod/myData.csv?dl=0