Как выделить курсором часть коэффициента корреляции в ggplot2 - PullRequest
0 голосов
/ 05 октября 2018

Я не могу понять, как сделать букву "R" в функции annotate() ниже курсивом на моем графике.Я пытался добавить expression() до paste() и использовать italic(), но затем вставил раздел, начинающийся с «round (cor ...»), как текст, а не результат вычисления.

    ggplot(subset(crossnat, !is.na(homicide) & !is.na(gdppercapita)),
  aes(x = gdppercapita, y = homicide)) +
  geom_point(alpha = 0.4) +
  ggtitle("Figure 3: Relationship between GDP per capita ($) and homicide rate") +
  labs(subtitle = "n = 177 (17 countries removed as either GDP per capita or homicide data unavailable",
       x = "GDP per capita ($)",
       y = "Number of homicides in 2013 (per 100k of population)") +
  scale_y_continuous(breaks = c(0,15,30,45,60,75,90)) +
  geom_smooth(method = "loess",
              formula = y ~ x,
              colour = "red",
              size = 0.5) +
  annotate(x = 50000, y = 75,
           label = paste("R = ", round(cor(crossnat$gdppercapita, crossnat$homicide, use = "complete.obs"),3)),
           geom = "text", size = 4)

Спасибо

РЕДАКТИРОВАТЬ - предлагаемый возможный дубликат, похоже, не работает для меня. Я думаю, это может быть связано с вычислением корреляции, встроенной в annotate()?

1 Ответ

0 голосов
/ 05 октября 2018

Этот тип форматирования сложен.Вам нужно обратить внимание на пробелы, когда используется parse=TRUE.Для форматирования текста вам необходимо выполнить два шага вставки.Давайте создадим простой воспроизводимый пример:

ggData <- data.frame(x=rnorm(100), y=rnorm(100) )

Я рекомендую вам хранить текст И значение корреляции R вне функции ggplot для удобства чтения кода:

textPart1 <- "paste(italic(R), \" =\")"      # check the ?annotate example for \" =\"
corVal <- round(cor(ggData$x, ggData$y, use = "complete.obs"), 3)

Хитрость заключается в paste двух переменных с sep="~" вместо пробела.

ggplot(ggData, aes(x = x, y = y) ) +
  geom_point(alpha = 0.4) + 
  annotate("text", x = 2, y = 1.5,
           label = paste(textPart1, corVal, sep="~"), size = 4 , parse=TRUE)
...