Я почти уверен, что где-то существует более элегантное решение. Я могу просто предложить вам поставить разрыв как каждый n
символ. Есть хороший обходной путь от https://stackoverflow.com/a/2352006/9300556:
gsub('(.{1,90})(\\s|$)', '\\1\n', s)
Будет разбивать строку "s" на строки с максимум 90 символами (исключая
символ переноса строки "\ n", но с пробелами между словами),
если само слово не превышает 90 символов, то это слово
сам займет целую строку.
Так что нам просто нужно добавить gsub()
в ggplot
эстетику:
p <- ggplot(df, aes(x,y,
text = gsub('(.{1,20})(\\s|$)', '\\1\n', z))) +
geom_point()
ggplotly(p, tooltip = "text")
UPDATE
Вот более элегантное решение из комментариев @Rich Pauloo. В этом случае ваши строки также будут в основном дополнены левой (но на самом деле автоматически выровнены). Однако заполнение зависит от разрешения графика и расположения метки.
library(stringr)
p <- ggplot(df,
aes(x, y,
text = stringr::str_wrap(
string = z,
width = 20,
indent = 1, # let's add extra space from the margins
exdent = 1 # let's add extra space from the margins
))) +
geom_point()
ggplotly(p, tooltip = "text")