2014-10-09 4 views
1

Я хотел бы построить фигуру, чтобы настроить текст полосы с выражениями и нормальными строками (включая пробелы), но получил ошибку, когда обычный текст содержал пробелы. Это пример, чтобы воспроизвести мой вопрос:label_parsed of facet_grid в 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 
    ^

Там нет ошибки, если колонка «удар» без каких-либо пробелов.

Как я могу решить эту проблему? Спасибо за любые предложения.

+0

Вы можете заменить пробелы на '~' они затем будут обрабатываться как пробелы. См. Комментарии к [этот ответ] (http://stackoverflow.com/a/37418333/2641825). –

ответ

2

Вы можете заменить свою собственную функцию метки:

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

+0

Спасибо за ваше предложение, оно работает для меня сейчас. – Bangyou

Смежные вопросы