facet_wrap分面标题含括号内>=符号解析失败,如何解决?
解决ggplot2分面标题中括号内包含
>=符号的解析错误问题 问题场景
使用facet_wrap()生成分面图时,若通过label_parsed解析标题文本,>=符号在括号外能正常渲染,但放入括号内会触发解析错误,报错信息如下:
错误 in parse(text = as.character(values)): <text>:1:13: 意外的'>=' 1: Horsepower (>= ^
问题原因
label_parsed会将标题文本当作R表达式解析,括号在R表达式中代表函数调用语法,直接在括号内写>=会被识别为无效的函数调用参数,导致解析失败。
解决方案
方法一:用I()包裹括号内的符号,标记为纯文本
通过I()函数告诉解析器括号内的内容是纯文本,而非表达式语法:
library(tidyverse) mtcars %>% mutate(size = ifelse(hp >= 100, 'greater', 'lesser'), size = factor(size, levels = c("greater", "lesser"), labels = c("Horsepower (I(>= 100))", "Horsepower (I(< 100))"))) %>% ggplot(aes(x = mpg, y = wt)) + geom_point() + theme_bw() + facet_wrap(~size, labeller = label_parsed)
方法二:使用LaTeX语法渲染符号与括号
利用LaTeX语法的转义字符,用\\(和\\)表示括号,\\ge表示大于等于符号,解析时会正确渲染:
library(tidyverse) mtcars %>% mutate(size = ifelse(hp >= 100, 'greater', 'lesser'), size = factor(size, levels = c("greater", "lesser"), labels = c("Horsepower \\(\\ge 100\\)", "Horsepower \\(< 100\\)"))) %>% ggplot(aes(x = mpg, y = wt)) + geom_point() + theme_bw() + facet_wrap(~size, labeller = label_parsed)
方法三:移除label_parsed,直接使用纯文本标签
如果不需要对标题进行表达式渲染,直接去掉labeller = label_parsed参数,纯文本标签可正常显示:
library(tidyverse) mtcars %>% mutate(size = ifelse(hp >= 100, 'greater', 'lesser'), size = factor(size, levels = c("greater", "lesser"), labels = c("Horsepower (>= 100)", "Horsepower (< 100)"))) %>% ggplot(aes(x = mpg, y = wt)) + geom_point() + theme_bw() + facet_wrap(~size)
内容的提问来源于stack exchange,提问作者tassones
相关产品推荐
相关产品推荐

