当 parse=TRUE 时,将 geom_text 更改为粗体

Change geom_text to bold when parse=TRUE

我正在注释多面图以包含上标,但我无法将文本设为粗体。我意识到这与在 plot 调用之外创建 expression 然后指定 parse=TRUE 有关。可能有一个非常简单的解决方案,但到目前为止,我尝试过的任何方法都没有奏效,包括 bquote()bold() 的使用。谢谢

library(ggplot2)

data(iris)

rsq<-c(.3,.6,.75)
pos<-c(5,6,7)
Species<-levels(iris$Species)

big_data<-as.data.frame(cbind(pos, rsq))
big_data$Species<-Species

lab <- paste("r^2 == ", round(big_data$rsq,2))

ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) +
  facet_wrap(~Species,scales='free_x')+
  geom_point(size=3,show.legend = F) +
  geom_text(aes(x=pos,y=1,label=as.character(lab)),parse=TRUE,data=big_data,fontface='bold')

你可以让 r 成为 bold()

lab <- sprintf("bold(r)^2 == %.2f", big_data$rsq)

但仅此而已。来自 ?plotmath

Note that bold, italic and bolditalic do not apply to symbols, and hence not to the Greek symbols such as mu which are displayed in the symbol font. They also do not apply to numeric constants.

更精细的排版的最佳选择可能是 tikzDevice。

一个小作弊 - 将文本打印 3 次,大小略有增加。

ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) +
  facet_wrap(~Species,scales='free_x')+
  geom_point(size=3,show.legend = F) +
  geom_text(aes(x=pos,y=1,label=as.character(lab)),parse=TRUE,data=big_data,size=4)+
  geom_text(aes(x=pos,y=1,label=as.character(lab)),parse=TRUE,data=big_data,size=4.07)+
  geom_text(aes(x=pos,y=1,label=as.character(lab)),parse=TRUE,data=big_data,size=4.08)

我知道这是一个很大的挖掘时间,但是对于像我这样偶然发现这个 post 的人,您可以使用 ggtext 来获得您喜欢的格式:

library(ggplot2)
library(ggtext)
big_data <- data.frame(
    pos = 5:7, 
    Species = levels(iris$Species),
    lab = paste0("<b>r<sup>2</sup> = ", sprintf("%.2f", c(.3,.6,.75), 2), "</b>")) 
ggplot(iris, aes(x=Sepal.Length, y = Sepal.Width)) +
    facet_wrap(~Species, scales='free_x')+
    geom_point(size = 3, show.legend = FALSE) +
    geom_richtext(data = big_data, aes(x = pos, y = 1, label = lab),
        fill = NA, label.color = NA,
        label.padding = grid::unit(rep(0, 4), "pt")
    )

reprex package (v0.3.0)

于 2021-01-25 创建