ggplot-添加垂直线

时间:2018-12-04 02:09:32

标签: r ggplot2

下面是我正在使用的data.table。我想在longSignal列为1时绘制垂直线。

data.frame(
        index = c("2011-09-09 17:00:00", 
                    "2011-09-12 17:00:00",
                    "2011-09-13 17:00:00", "2011-09-14 17:00:00",
                    "2011-09-15 17:00:00", "2011-09-16 17:00:00", "2011-09-19 17:00:00",
                    "2011-09-20 17:00:00", "2011-09-21 17:00:00",
                    "2011-09-22 17:00:00", "2011-09-23 17:00:00", "2011-09-26 17:00:00",
                    "2011-09-27 17:00:00", "2011-09-28 17:00:00", "2011-09-29 17:00:00",
                    "2011-09-30 17:00:00", "2011-10-03 17:00:00",
                    "2011-10-04 17:00:00", "2011-10-05 17:00:00", "2011-10-06 17:00:00",
                    "2011-10-07 17:00:00"),
   EURUSD.Close = c(1.36534, 1.367895, 1.36783, 1.37546, 1.38764, 1.38005,
                    1.36849, 1.37009, 1.35722, 1.346385, 1.35002, 1.353255,
                    1.35825, 1.35425, 1.359705, 1.33876, 1.31759, 1.33489, 1.33482,
                    1.34374, 1.33771),
     longSignal = c(0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
                    0)
)

这是我正在ggplot中尝试使用的代码

ggplot(RSI_data, aes(index, EURUSD.Close)) +
  geom_line() + 
  geom_vline(aes(xintercept = as.numeric(RSI_data$index[which(RSI_data$longSignal == 1)]), 
             size = 2, colour = "red"))

我一直遇到错误。谁能告诉我该怎么做?一世 预先感谢!

2 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

# convert index to date-time format; this makes x-axis continuous rather than
# categorical, so you don't have to specify the group for geom_line.
RSI_data$index <- as.POSIXct(as.character(RSI_data$index))

ggplot(RSI_data,
       aes(x = index, y = EURUSD.Close)) +
  geom_line() +
  geom_vline(data = subset(RSI_data, longSignal == 1), # filter data source
             aes(xintercept = index),
             size = 2, colour = "red")

plot

答案 1 :(得分:1)

如果您将xintercept放在aes()之外,那么它会起作用。此外,您可能还会收到另一个错误消息,说geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?,因此group=1可以阻止该错误

 ggplot(RSI_data, aes(index,EURUSD.Close)) +
      geom_line(group=1) +
      geom_vline(xintercept = as.numeric(RSI_data$index[which(RSI_data$longSignal == 1)]), 
                 size = 2, colour = "red")