Смешивание выражения, простого текста и новой строки в выражении ggplot2

Я пытаюсь создать ярлыки / наклейки, используя ggplot2, Я вытягиваю текст для меток из источника и привязываю к графику. Я могу сделать это следующим образом:

labtxt1 <- c("This text should be bold", "This text should also be bold", "Another text to be bold")
labtxt1 <- strwrap(labtxt1, width = 20)

labtxt2 <- c("This text should not be bold", "This text should also not be bold", "Another text to be plain")
labtxt2 <- strwrap(labtxt2, width = 20)

library(ggplot2)
library(Hmisc)

labtxt <- c(labtxt1, labtxt2)
labtxt <- paste(labtxt, collapse = "\n", sep = "")
labtxt <- escapeRegex(labtxt)

ggplot(x=1, y = 1) + 
  annotate("text", x = 0.5, y = 0.5, 
           label = labtxt,
           colour = "red", parse = F, lineheight = 0.8)

введите описание изображения здесь

Как теперь сделать текст в labtxt1 выделять жирным шрифтом вместе с текстом labtxt2 как простое поддержание оправдания и linewidth?

Я пробовал с expression с \n, который портит оправдание, и с atop, но который портит ширину линии.

Если я попытаюсь аннотировать отдельно, то позиционирование будет трудным, поскольку длина labtxt1 а также labtxt2 варьируется для разных этикеток / наклеек.

Как получить желаемый результат?

1 ответ

Решение

Вы могли бы обернуть текст в невидимую таблицу,

library(ggplot2)
library(gridExtra)

label <- "plain text\nbold('bold line')\nitalic('italic line')\nplain again"
disect <- strsplit(label, "\\n")[[1]]

mytheme <- ttheme_minimal(core = list(fg_params = list(parse=TRUE, col="red",
                                                       hjust=0, x=0.1)))
tg <- tableGrob(as.matrix(disect), theme=mytheme)

ggplot(x=1, y = 1) + 
  annotation_custom(tg)
Другие вопросы по тегам