如何在ggplot中添加带有斜体和变量的复杂标签?

时间:2018-12-04 20:04:50

标签: r ggplot2 expression geom-text

我使用expression()paste()bquote()或某种组合阅读了许多有关此主题的帖子。我认为我已经快要解决我的问题了,但我只是无法到达目的地。以下脚本生成标有“ y = 1 + 2(x); r ^ 2 = 0.9”的图。如何斜体化“ y”和“ x”,以及斜体化“ r”和上标“ r ^ 2”的2?如果我忽略了先前的一篇相关帖子,对不起,请直接引导我。

df <- data.frame(x=c(1:5), y=c(1:5))
a <- 1    
b <- 2
r2 <- 0.9
eq <- paste("y = ", a, " + ", b, "(x); r^2=", r2)
ggplot(data=df, aes(x=x, y=y))+
  geom_point(color="black")+
  geom_text(x=2, y=4,label=eq, parse=FALSE)

3 个答案:

答案 0 :(得分:4)

您可以使用annotate()来将其直接粘贴到绘图中。

library(ggplot2)
ggplot(data=df, aes(x=x, y=y)) +
  geom_point(color="black") +
  annotate('text', 2.5, 4, 
           label=paste("italic(y)==", a, "+", b, 
                       "~italic(x)~';'~italic(r)^2==", r2), 
           parse=TRUE, 
           hjust=1, size=5)

产量:

enter image description here

数据:

df <- data.frame(x=c(1:5), y=c(1:5))
a <- 1
b <- 2
r2 <- 0.9

答案 1 :(得分:3)

您可以结合使用substituteplotmathhttps://www.rdocumentation.org/packages/grDevices/versions/3.5.1/topics/plotmath)来使文本变为斜体-

# setup
set.seed(123)
library(ggplot2)

# dataframe
df <- data.frame(x = c(1:5), y = c(1:5))

# label
eq <- substitute(
  expr =
    paste(
      italic("y"),
      " = ",
      a,
      " + ",
      b,
      "(",
      italic("x"),
      "); ",
      italic("r") ^ 2,
      " = ",
      r2
    ),
  env = base::list(a = 1,
                   b = 2,
                   r2 = 0.9)
)

# plot
ggplot(data = df, aes(x = x, y = y)) +
  geom_point(color = "black") +
  labs(subtitle = eq)

reprex package(v0.2.1)于2018-12-04创建

答案 2 :(得分:1)

除了Indrajit Patiljay-sf的答案外,我想补充一点,还有一种自动方法可以使用称为{{ 3}}。您想要用斜体表示的字母已经以这种方式格式化。需要使用的代码是:

> install.packages('ggpmisc'); library(ggpmisc); formula <- y ~ x
> df <- data.frame(x=c(1:5), y=c(1:5))
> ggplot(data = df, aes(x, y)) + geom_point(color="black") + 
       geom_smooth(method =   "lm", formula = formula) + 
       stat_poly_eq(aes(label =   paste(..eq.label.., ..adj.rr.label.., sep = "~~~~")),
       formula = formula, parse = TRUE)

它也显示了合适的线条,我希望这不会妨碍主要目标。 ggpmisc

  

编辑:可以使用linetype = 0删除该行,与   aesthetics中的大多数ggplot2

... + geom_smooth(method =   "lm", formula = formula, linetype = 0) + ...