2010-03-08 8 views
9

J'essaye de remplacer le texte dans certaines bandes de ggplot pour incorporer des caractères grecs. Voici quelques exemples de données et la base de l'intrigue.Les lettres grecques dans le texte de la bande ggplot

dfr <- data.frame(
    x = rep(1:10, times = 6), 
    y = runif(60), 
    fx = rep(c("foo", "bar"), each = 30), 
    fy = rep(c("alpha", "beta", "gamma"), each = 10, times = 2) 
) 

p <- ggplot(dfr, aes(x, y)) + geom_point() 

Ma première tentative de tracé n'a pas de grec dans les étiquettes de bande.

p + facet_grid(fy ~ fx) 

Je suppose que je suis censé ajouter un argument étiqueteuse à facet_grid pour remplacer le texte. J'ai supposé que cela devrait cracher une expression pour manipuler les caractères grecs, mais mon code jette juste une erreur quand le graphique est imprimé.

lbl <- function(variable, value) 
{ 
    if(variable == "fy") parse(text=as.character(value)) else value 
} 
p + facet_grid(fy ~ fx, labeller = lbl) 


Error in aperm(X, c(s.call, s.ans)) : 
    unimplemented type 'expression' in 'aperm' 

Comment dois-je en train de créer les étiquettes de bande?

Répondre

9

Essayez ceci:

p + facet_grid(fy ~ fx, labeller = label_parsed) 
+0

Je vois que cette réponse fonctionne, mais je ne peux pas comprendre comment. D'où vient label_parsed? Je ne peux pas le trouver dans les docs ggplot en ligne. – kmm

+2

Il est mentionné brièvement dans le paquet docs (http://cran.r-project.org/web/packages/ggplot2/index.html); Je suis d'accord que cela pourrait être mieux documenté - je le savais seulement car j'ai vu Hadley en parler à un moment donné. –

+0

Merci - je le vois maintenant. C'est une commande potentiellement très utile. – kmm

3

affichant ce ici car il est lié:

Si vous voulez que le nom de la variable elle-même, ainsi que les niveaux/valeurs de la variable à évaluer comme une expression (c.-à-rendus comme si elles étaient en latex), essayez ceci:

label_parseall <- function(variable, value) { 
    plyr::llply(value, function(x) parse(text = paste(variable, 
     x, sep = "=="))) 
} 

Exemple:

data <- data.frame(x = runif(10), y = runif(10), 
    gamma = sample(c("gamma[0]", "gamma[1]"), 10, rep = T)) 
ggplot(data, aes(x, y)) + geom_point() + facet_grid(~gamma, 
    labeller = label_parselabel) 

enter image description here

image au http://img709.imageshack.us/img709/1168/parseall.png

Questions connexes