2

我无法将 R2 注释添加到多面图,其中我的 R2 值有时 <0.01(是的,这不是一个好的回归)。我希望 R2 的 2 是上标。我尝试了几个选项,但似乎被我的价值观中的 < 符号所阻碍

例如,使用 iris 数据集,我首先使用之前计算的 R2 值设置了一个新数据框。还设置了 x 和 y 位置,因为每个方面都不同(对于 iris 数据集不是必需的,但它是我的)

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)

我收到此错误:

解析错误(文本 = 文本 [[i]]): :1:7: 意外 '<' 1: r^2== < ^

有没有办法更改我的代码或我的标签数据框,以便它不会尝试评估这些符号?

4

2 回答 2

5

如果您使用的是 ggtext 包,则可以避免使用 plotmath,它可以处理基本的 HTML/markdown 作为输入。

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'

reprex 包(v0.3.0)于 2019 年 12 月 2 日创建

于 2019-12-03T05:29:01.097 回答
2

我认为更简单的解决方案是在 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)

我认为这给了你想要的情节: 情节_R2 https ://ibb.co/vwbvqp2

于 2019-12-01T23:07:49.550 回答