9

我正在注释多面图以包含上标,但无法使文本变为粗体。我意识到这与expression在情节调用之外创建一个然后指定parse=TRUE. 可能有一个非常简单的解决方案,但到目前为止我没有尝试过任何工作,包括使用bquote()and 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')

在此处输入图像描述

4

3 回答 3

5

你可以r成为bold()

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

仅此而已。从?plotmath

请注意,粗体、斜体和粗体不适用于符号,因此不适用于以符号字体显示的希腊符号,例如 mu。它们也不适用于数值常量。

你最好的选择可能是 tikzDevice。

于 2017-05-02T00:23:56.123 回答
4

我知道这是挖掘的重要时间,但是对于像我这样偶然发现这篇文章的人,您可以使用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 包于 2021-01-25 创建(v0.3.0)

于 2021-01-25T17:29:18.673 回答
3

有点作弊 - 将文本绘制 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)

在此处输入图像描述

于 2017-05-02T05:43:27.710 回答