Каков хороший способ разместить текст внутри области печати с помощью ggplot2, используя предварительно определенную ширину текста?

#r #text #ggplot2

#r #текст #ggplot2

Вопрос:

Вот пример проблемы:

 example=data.frame(x1=c(1,4.1,7),x2=c(4,7.1,10),
 y1=c(1,1,5),y2=c(2,2,6),text=c('Example','A Bigger Example','little.lite'))
example$xmid = (example$x1 example$x2)/2
example$ymid = (example$y1 example$y2)/2

ggplot() geom_rect(data=example,aes(xmin=x1,xmax=x2,ymin=y1,ymax=y2,fill=text)) 
geom_text(data=example,aes(x=xmid,y=ymid,label=text))
  

Результат выглядит следующим образом:

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

Я попытался настроить размер меток, используя количество символов в строке, но это не учитывает интервал и кернинг разных символов в немоноширинных шрифтах. Например,

 example$text_size=24/nchar(as.character(example$text))
ggplot() geom_rect(data=example,aes(xmin=x1,xmax=x2,ymin=y1,ymax=y2,fill=text)) 
geom_text(data=example,aes(x=xmid,y=ymid,label=text,size=text_size)) 
 scale_size_continuous(range=c(4,8))
  

Затем результат выглядит следующим образом:

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

Хотя ширина текста в нижних полях одинакова, ширина текста строки со многими буквами l и t. меньше. Есть ли какой-либо способ заранее рассчитать интервал, чтобы учесть ширину всех разных символов?

Комментарии:

1. strwidth может быть полезно для вас здесь.

Ответ №1:

Согласно предложению @Tyler Rinker, я использовал strwidth функцию вместо nchar .

 example$text_size2=24/strwidth(as.character(example$text))
ggplot() geom_rect(data=example,aes(xmin=x1,xmax=x2,ymin=y1,ymax=y2,fill=text)) 
geom_text(data=example,aes(x=xmid,y=ymid,label=text,size=text_size2)) 
scale_size_continuous(range=c(4,8))
  

Конечный результат выглядит следующим образом:

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

Комментарии:

1. Когда я пытаюсь запустить ваш пример, я получаю Error in strwidth(as.character(example$text)) : plot.new has not been called yet . Из документации видно, что функция извлекает ширину из графического устройства, если units = "user" (по умолчанию в наши дни) и, похоже, не работает с ggplot2. Используйте units = "figure" для выполнения обычной работы в версиях R и ggplot2 2018 года.