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

Ban*_*you 6 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
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”列没有任何空格,则不会出现错误。

我该如何解决这个问题?感谢您的任何建议。

Ric*_*son 8

截至 2018 年,现在可以直接使用ggplot2

p + facet_grid(type~impact, labeller = labeller(type = label_parsed))
Run Code Online (Sandbox Code Playgroud)

Tidyverse这是帮助页面的链接。

在此输入图像描述


hrb*_*str 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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述