我想绘制一个图形来自定义带有表达式和普通字符串(包含空格)的条形文本,但当普通文本包含空格时出现错误。这是重现我的问题的示例:
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
Run Code Online (Sandbox Code Playgroud)
错误是
Error in parse(text = x) : <text>:1:8: unexpected symbol
1: Direct impact
^
Run Code Online (Sandbox Code Playgroud)
如果“impact”列没有任何空格,则不会出现错误。
我该如何解决这个问题?感谢您的任何建议。
截至 2018 年,现在可以直接使用ggplot2:
p + facet_grid(type~impact, labeller = labeller(type = label_parsed))
Run Code Online (Sandbox Code Playgroud)
Tidyverse这是帮助页面的链接。
您可以替换自己的标签函数:
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
Run Code Online (Sandbox Code Playgroud)
