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