Есть ли эквивалент points () на ggplot2 - PullRequest
1 голос
/ 17 июня 2020

Я работаю с ценами на акции и пытаюсь изобразить разницу в цене. Я создал один, используя autoplot.zoo(), мой вопрос в том, как я могу изменить форму точек на треугольники, когда они выше верхнего порога, и на круги, когда они ниже нижнего порога. Я понимаю, что при использовании функции basi c plot() вы можете сделать это, вызвав функцию points(), задавшись вопросом, как я могу это сделать, но с ggplot2.

Вот код для участок:

p<-autoplot.zoo(data, geom = "line")+
        geom_hline(yintercept = threshold, color="red")+
        geom_hline(yintercept = -threshold, color="red")+
        ggtitle("AAPL vs. SPY out of sample")
p+geom_point()

Image of plot

1 Ответ

0 голосов
/ 17 июня 2020

Мы не можем полностью воспроизвести без ваших данных, но вот попытка с некоторыми образцами сгенерированных данных, которые должны быть достаточно похожими, чтобы вы могли адаптировать их для своих целей.

# Sample data
data = data.frame(date = c(2001:2020),
                  spread = runif(20, -10,10))

# Upper and lower threshold
thresh <- 4

Вы можете создать дополнительную переменную, которая определяет форму на основе отношений в самих данных, и передать ее в качестве аргумента в ggplot.

# Create conditional data
data$outlier[data$spread > thresh] <- "Above"
data$outlier[data$spread < -thresh] <- "Below"
data$outlier[is.na(data$outlier)] <- "In Range"

library(ggplot2)
ggplot(data, aes(x = date, y = spread, shape = outlier, group = 1)) +
  geom_line() +
  geom_point() +
  geom_hline(yintercept = c(thresh, -thresh), color = "red") +
  scale_shape_manual(values = c(17,16,15))

enter image description here

# If you want points just above and below# Sample data
data = data.frame(date = c(2001:2020),
                  spread = runif(20, -10,10))
thresh <- 4
data$outlier[data$spread > thresh] <- "Above"
data$outlier[data$spread < -thresh] <- "Below"
ggplot(data, aes(x = date, y = spread, shape = outlier, group = 1)) +
  geom_line() +
  geom_point() +
  geom_hline(yintercept = c(thresh, -thresh), color = "red") +
  scale_shape_manual(values = c(17,16))

enter image description here

В качестве альтернативы вы можете просто добавить точки выше и ниже порога как отдельные слои с вручную заданными формами , как это. Аргумент pch указывает на тип фигуры.

# Another way of doing this

data = data.frame(date = c(2001:2020),
                  spread = runif(20, -10,10))

# Upper and lower threshold
thresh <- 4

ggplot(data, aes(x = date, y = spread, group = 1)) +
  geom_line() +
  geom_point(data = data[data$spread>thresh,], pch = 17) +
  geom_point(data = data[data$spread< (-thresh),], pch = 16) + 
  geom_hline(yintercept = c(thresh, -thresh), color = "red") +
  scale_shape_manual(values = c(17,16))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...