我想绘制一个图形来自定义带有表达式和普通字符串(包含空格)的条带文本,但是当普通文本包含空格时会出错。这是重现我的问题的一个例子:
library(ggplot2)
labels <- c("'FT'[1]*' - Ctrl'",
"'FT'[tot]*' - FT'[1]*''",
"'FT'[tot]*' - Ctrl'")
lbl_pd <- data.frame(impact = c('Direct impact', 'Direct impact',
'Indirect impact', 'Indirect impact'),
type = c(labels[1], labels[2], labels[1], labels[2]),
Latitude = -22.5, Longitude = 115,
label = c('a', 'b', 'c', 'd'))
p <- ggplot(lbl_pd)
p <- p + geom_text(aes(Longitude, Latitude, label = label), size = 2)
p <- p + facet_grid(type~impact, labeller = label_parsed)
p
错误是
Error in parse(text = x) : <text>:1:8: unexpected symbol
1: Direct impact
^
如果列&#34;影响&#34;则没有错误没有任何空格。
我怎么能解决这个问题?感谢您的任何建议。
答案 0 :(得分:3)
您可以替换自己的标签功能:
library(plyr)
my_label_parsed <- function (variable, value) {
if (variable == "impact") {
return(as.character(value))
} else {
llply(as.character(value), function(x) parse(text = x))
}
}
library(ggplot2)
labels <- c("'FT'[1]*' - Ctrl'",
"'FT'[tot]*' - FT'[1]*''",
"'FT'[tot]*' - Ctrl'")
lbl_pd <- data.frame(impact = c('Direct impact', 'Direct impact',
'Indirect impact', 'Indirect impact'),
type = c(labels[1], labels[2], labels[1], labels[2]),
Latitude = -22.5, Longitude = 115,
label = c('a', 'b', 'c', 'd'))
p <- ggplot(lbl_pd)
p <- p + geom_text(aes(Longitude, Latitude, label = label), size = 2)
p <- p + facet_grid(type~impact, labeller = my_label_parsed)
p
答案 1 :(得分:2)
从2018年开始,现在可以直接使用ggplot2
:
p + facet_grid(type~impact, labeller = labeller(type = label_parsed))
这是指向Tidyverse
help page的链接。