Использование ggplot geom_text при комбинировании надстрочного индекса и метки переменной, содержащей <символ - PullRequest
1 голос
/ 02 декабря 2019

У меня проблемы с добавлением аннотаций R2 на граненый график, где мои значения R2 иногда <0,01 (да, это не очень хорошая регрессия). Я хотел бы, чтобы 2 из R2 были надстрочными. Я перепробовал несколько вариантов, но, похоже, заблокирован символом <в моих значениях </p>

, например, используя набор данных радужной оболочки, я сначала настраивал новый фрейм данных с ранее вычисленными значениями R2. Позиции x & y также устанавливаются, так как они различны для каждого аспекта (необязательно для набора данных радужной оболочки, но для моего)

SEr2s <- data.frame(Species = c("virginica",  "setosa",  "versicolor" ), 
                  xpos = c(5,7,7), ypos = c(4.2, 2, 4.2), 
                  lab = c("<0.01","0.08", "0.05"))

Затем я запускаю свой график:

XYPlot<-ggplot(data = iris, aes(x=Sepal.Length)) + 
  geom_point(aes(y = Sepal.Width), colour="grey40")+
  geom_smooth(aes(y = Sepal.Width), col="grey40", lwd=0.5, method="lm", se=FALSE) +
  geom_text(data = SEr2s, size=3, vjust=0, hjust=0,
            aes(x = xpos,  y = ypos, 
             label = paste("r^2==",lab)), parse = TRUE)+
  theme_bw() +
  theme(strip.background = element_blank(), strip.placement = "outside",
        panel.grid.minor = element_blank(), legend.position = "right") +
  facet_wrap(~Species)

Я получаю эту ошибку:

Ошибка при разборе (text = text [[i]]):: 1: 7: неожиданная '<' 1: r ^ 2 == <^</p>

Есть ли способ изменить мой код или мой меточный фрейм данных, чтобы он не пытался оценить эти символы?

Ответы [ 2 ]

2 голосов
/ 02 декабря 2019

Я думаю, что более простое решение - определить индекс в вашем data.frame (SEr2s):

SEr2s <- data.frame(Species = c("virginica",  "setosa",  "versicolor" ), 
                    xpos = c(5,7,7), ypos = c(4.2, 2, 4.2), 
                    lab = c("atop(R^2<0.01)","atop(R^2==0.08)", "atop(R^2==0.05)"))

Затем вы можете вызывать ggplot без использования только label=lab:


ggplot(data = iris, aes(x=Sepal.Length)) + 
    geom_point(aes(y = Sepal.Width), colour="grey40")+
    geom_smooth(aes(y = Sepal.Width), col="grey40", lwd=0.5, method="lm", se=FALSE) +
    geom_text(data = SEr2s, size=3, vjust=0, hjust=0,
              aes(x = xpos,  y = ypos, 
                  label = lab), parse = TRUE)+
    theme_bw() +
    theme(strip.background = element_blank(), strip.placement = "outside",
          panel.grid.minor = element_blank(), legend.position = "right") +
    facet_wrap(~Species)

Я думаю, что это дает вам сюжет, который вы хотите: plot_R2 https://ibb.co/vwbvqp2

1 голос
/ 03 декабря 2019

Вы можете избежать использования plotmath, если вместо этого используете пакет ggtext, который может обрабатывать базовый HTML / разметку в качестве входных данных.

# this requires the current development versions of ggplot2 and ggtext
# remotes::install_github("tidyverse/ggplot2")
# remotes::install_github("clauswilke/ggtext")

library(ggplot2)
library(ggtext)

SEr2s <- data.frame(Species = c("virginica",  "setosa",  "versicolor" ), 
                    xpos = c(5,7,7), ypos = c(4.2, 2, 4.2), 
                    lab = c("<0.01","0.08", "0.05"))

ggplot(data = iris, aes(x=Sepal.Length)) + 
  geom_point(aes(y = Sepal.Width), colour="grey40")+
  geom_smooth(aes(y = Sepal.Width), col="grey40", lwd=0.5, method="lm", se=FALSE) +
  geom_richtext(
    data = SEr2s, size=3, vjust=0, hjust=0,
    aes(x = xpos,  y = ypos, label = paste0("r<sup>2</sup> = ", lab))
  ) +
  theme_bw() +
  theme(
    strip.background = element_blank(), strip.placement = "outside",
    panel.grid.minor = element_blank(), legend.position = "right") +
  facet_wrap(~Species)
#> `geom_smooth()` using formula 'y ~ x'

Создано в2019-12-02 представьте пакет (v0.3.0)

...