Использование str_wrap() в сочетании с выражением() для получения собственной подписи, подходящей под график в ggplot2.

Я пытаюсь создать собственную подпись, чтобы она соответствовала моему сюжету, чтобы часть текста подписи была выделена жирным шрифтом, а другая часть - простой. В то же время, я хотел бы, чтобы заголовок обтекался, чтобы заголовок не обрезался.

cap <- expression(paste('\"', bold("This text should be bold"), ' This text should not be bold, but should be plain? And everything should fit under the plot\"'))

Вот моя первая попытка. Как видите, жирный текст отображается правильно; однако текст заголовка обрезается на границе графика справа.

ggplot(data = mtcars, mapping = aes(x=wt, y=mpg))+
  theme(plot.caption = element_text(hjust = 0, size = 14))+
  labs(caption = cap)

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

Во второй попытке я использовал stringr::str_wrap, чтобы текст больше не обрезался; однако выражение не оценивается, поэтому заголовок неверен.


ggplot(data = mtcars, mapping = aes(x=wt, y=mpg))+
  theme(plot.caption = element_text(hjust = 0, size = 14))+
  labs(caption = str_wrap(cap))


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

Кто-нибудь знает, как решить эту проблему? То есть хотелось бы, чтобы подпись как оценивала, чтобы отображалась корректно, так и обтекала.

Спасибо большое.


person HumanityFirst    schedule 09.04.2020    source источник


Ответы (1)


expression не может отображать разрывы строк. Вы можете получить две строки с помощью функции atop, но относительно новый ggtext гораздо более гибкий. Например:

library(ggplot2)
library(ggtext)

cap2 <- "<b>This text should be bold.</b> This text should not be bold, but should be plain? And everything should fit under the plot"

ggplot(data = mtcars, mapping = aes(x=wt, y=mpg)) +
  labs(caption = cap2) +
  theme(plot.caption=element_textbox_simple(hjust=0, size=14))

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

person eipi10    schedule 09.04.2020