问题描述
我有一个脚本,用于生成带有多行带状文本的多面图。但是,这不再起作用了。以下是MWE,应从中解析带状文本,例如"bold(A)\nreally~long~extra"
至:
A
真的很长
您可以通过调试功能看到第二行。我什至提高了利润率,但无济于事...
有什么问题吗?
exmpl = data.frame(a = 1:100,b = rep(1:5,20),f = factor(rep(LETTERS[1:5],each = 20))) %>%
as_tibble() %>%
mutate(f2 = paste0("bold(",f,")\nreally~long~extra"))
ggplot(exmpl,aes(x = b,y = a)) +
facet_grid(. ~ f2,labeller = label_parsed) +
geom_point() +
theme(strip.text.x = element_text(size = 10,hjust = 0,margin = margin(.5,.5,"cm"),debug = T))
编辑:
在进行此操作时,我只想出了此解决方法,因为我以前使用label_bquote()
的解决方案不再起作用。请查看this other question,也许您也可以帮助我吗?
解决方法
不确定是否适合您。但是,达到预期结果的一种方法是使用ggtext
包,该包允许您使用HTML和CSS来设置方面标签的样式。为此,ggtext
引入了一个新的主题元素element_markdown
。试试这个:
library(ggplot2)
library(dplyr)
exmpl = data.frame(a = 1:100,b = rep(1:5,20),f = factor(rep(LETTERS[1:5],each = 20))) %>%
as_tibble() %>%
mutate(f2 = paste0("<b>",f,"</b><br>","really long extra"))
ggplot(exmpl,aes(x = b,y = a)) +
facet_grid(. ~ f2) +
geom_point() +
theme(strip.text.x = ggtext::element_markdown(size = 10,hjust = 0))
对于您先前帖子中的第二个问题,解决方案可能如下所示:
mylabel <- function(x) {
mutate(x,Species = paste0(letters[Species]," <i>",Species,"</i>"))
}
p <- ggplot(iris,aes(Sepal.Length,Sepal.Width)) + geom_point()
p + facet_grid(. ~ Species,labeller = mylabel) +
theme(strip.text.x = ggtext::element_markdown())