ggplot2中facet_grid的label_parsed与空格和表达式混合

时间:2014-10-09 01:52:14

标签: r ggplot2

我想绘制一个图形来自定义带有表达式和普通字符串(包含空格)的条带文本,但是当普通文本包含空格时会出错。这是重现我的问题的一个例子:

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;则没有错误没有任何空格。

我怎么能解决这个问题?感谢您的任何建议。

2 个答案:

答案 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

enter image description here

答案 1 :(得分:2)

从2018年开始,现在可以直接使用ggplot2

p + facet_grid(type~impact, labeller = labeller(type = label_parsed))

这是指向Tidyverse help page的链接。

enter image description here