包装long geom_text标签

时间:2017-11-23 01:26:32

标签: r ggplot2

我在ggplot2中包装长文本时遇到问题。类似的问题在这里被问到ggplot2 is there an easy way to wrap annotation text?

我的问题是,如果我们有这样的文字

my_label <- "Some_arbitrarily_larger_text"

我们如何使用相同的方法缩小它?

wrapper <- function(x, ...) paste(strwrap(x, ...), collapse = "\n")

library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()+
annotate("text", x = 4, y = 25, label = wrapper(my_label, width = 5))

enter image description here

这种情况似乎无效!

2 个答案:

答案 0 :(得分:2)

您也可以致电stringr::str_wrap(),代码:

library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()+
  annotate("text", x = 4, y = 25, label = stringr::str_wrap(my_label, 5))
但是,如果这是你正在寻找的东西,我不会认为其中任何一个会破坏一个单词。

答案 1 :(得分:1)

使用Unicode零宽度空格并用_ +替换所有_

library(stringi)
library(ggplot2)

my_label <- "Some_arbitrarily_larger_text"
my_label <- stri_replace_all_fixed(my_label, "_", "_\U200B")

肉眼看来它是连续的:

my_label
## [1] "Some_​arbitrarily_​larger_​text"

但是,从编程方面来说,这是一个分词/包装机会:

wrapper <- function(x, ...) paste(stri_wrap(x, ...), collapse = "\n")

ggplot(mtcars, aes(x = wt, y = mpg)) + 
  geom_point() +
  annotate("text", x = 4, y = 25, label = wrapper(my_label, width = 5))

enter image description here