Обозначить конкретные точки на графике - PullRequest
0 голосов
/ 23 ноября 2018

Здесь у меня есть два вектора: "Pr" и "Z"

вот мой код:

Z=seq(1,10,by=0.5)
Pr=lapply(Z,functionZ)

plot(Z,Pr,main="CAT Bond Price with increasing attachment points",xlab="Attachment Point",ylab="Price")
 grid(nx = NULL, ny = NULL, col = "blue", lty = "dotted")

Я хочу выбрать только две точки вграфик, а именно те, где Z = 5 и Z = 7,5 и пометить их как «класс A» и «класс B» соответственно.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Чтобы придерживаться графика базового R, вы можете использовать функцию text.

Поскольку вы не предоставляете FunctionZ, я просто привожу пример.Я разместил надписи слева от точек.В зависимости от формы вашей функции вы можете настроить аргумент pos, чтобы разместить их в другом месте.

Z=seq(1,10,by=0.5)
functionZ = function(x) x + sin(x)
Pr=lapply(Z,functionZ)

plot(Z,Pr,main="CAT Bond Price with increasing attachment points",
    xlab="Attachment Point",ylab="Price")
grid(nx = NULL, ny = NULL, col = "blue", lty = "dotted")

text(x=c(5,7.5), y=functionZ(c(5,7.5)), labels= c("Class A", "Class B"), pos=2)

Labeled Plot

0 голосов
/ 23 ноября 2018

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

  Z=seq(1,10,by=0.5)
  Pr <- 1:19
  L <- c("Point1", rep(NA, 17), "Point19")
  df <- data.frame(Pr, Z, L)

  library(ggplot2)
  ggplot(aes(x=Pr, y=Z, label=L), data=df) +
    geom_point() +
    geom_label() +
    xlab("Attachment Point") +
    ylab("Price") +
    ggtitle("CAT Bond Price with increasing attachment points") +
    theme_classic()

Вы просто определяете, какие из них вы хотите отображать надписи в отдельном столбце меток, а ggplot выполняетостальное.

В вашем случае, когда вы определяете L, просто выполните

 L <- ifelse(Z==7, "Class A", ifelse(Z==7.5, "Class B", NA))
...