Может ли ggfittext автоматически выбрать поворот текста?

#r #ggplot2

Вопрос:

У меня есть участок с помеченными прямоугольниками. Чтобы текст оставался внутри прямоугольника, я использую пакет ggfittext. Пример ниже:

 library(ggplot2)
library(ggfittext)

df <- data.frame(
  xmin = c(1000, 4000), xmax = c(3000, 5000),
  ymin = c(1, 3), ymax = c(2, 5),
  label = "My Label"
)

p <- ggplot(df, aes(xmin = xmin, xmax = xmax,
                    ymin = ymin, ymax = ymax))  
  geom_rect(fill = "grey60")
p   geom_fit_text(aes(label = label),
                  size = 40)
 

Как можно заметить, метка во втором прямоугольнике справа поместилась бы лучше, если бы ее повернули, и метку не нужно было бы так сильно сжимать. Я легко могу сделать это вручную:

 p   geom_fit_text(aes(label = label),
                  size = 40, angle = c(0, 90))
 

Создано 2021-09-29 пакетом reprex (v2.0.1)

Однако я хотел бы автоматически определить, лучше ли размещать текст по горизонтали или вертикали. Есть ли возможность сделать это в ggfittext или альтернативных пакетах? Я ищу ответ, в котором визуальные размеры важнее, чем размеры данных: эти прямоугольники в примере намного шире, чем они в высоту в пространстве данных, но не в визуальном пространстве.

Ответ №1:

Я автор ggfittext. ggfittext не может автоматически поворачивать текст так, как вы описываете, и я не знаю ни одного пакета, который это сделает.

geom_fit_text() включает в себя reflow аргумент, который переформулирует текст из нескольких слов, чтобы лучше вписаться в поле. Это не работает, просто сокращая длину строки до тех пор, пока текст не подойдет, но вы найдете длину строки, которая делает соотношение сторон текста наиболее близким к размеру поля. Очевидно, что это более полезно при использовании более длинных текстовых меток.

 library(ggplot2)
library(ggfittext)

df <- data.frame(
  xmin = c(1000, 4000), xmax = c(3000, 5000),
  ymin = c(1, 3), ymax = c(2, 5),
  label = "My Label"
)

ggplot(df, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax))  
  geom_rect(fill = "grey60")  
  geom_fit_text(aes(label = label), size = 40, reflow = TRUE)
 

Создано в 2021-12-18 годах пакетом reprex (v2.0.1.9000)

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

1. Спасибо, это полезное решение именно этой проблемы. К сожалению, в моем случае метки-это цифры, которые нельзя элегантно обернуть текстом, но мне жаль, что я не включил эту деталь в вопрос. Для других людей с подобной проблемой это, вероятно, лучшее решение!