2016-05-24 1 views
1

This question explique comment ajouter des symboles mathématiques à l'intérieur d'un tracé. Mais cela ne fonctionne pas lorsque le texte est censé être stocké dans le cadre de données lui-même. C'est le cas du texte qui apparaît dans les petites cases des sous-tracés facet_wrap.Comment ajouter des symboles mathématiques dans le texte ggplot facet_wrap?

Voici un exemple reproductible. Disons par exemple que j'ai ces données en T et en m³ et que je voudrais faire un tracé comme celui-ci.

library(ggplot2) 
dtf <- data.frame(year = rep(1961:2010,2), 
        consumption = cumsum(rnorm(100)), 
        item = rep(c("Tea bags","Coffee beans"),each=50), 
        unit = rep(c("T","m^3"),each=50)) 
ggplot(data=dtf)+ 
    geom_line(aes(x=year, y=consumption),size=1) + 
    ylab(expression(paste("Consumption in T or ",m^3))) + 
    scale_x_continuous(breaks = seq(1960,2010,10)) + 
    theme_bw() + facet_wrap(item~unit, scales = "free_y") 

enter image description here

ylab(expression(m^3)) affiche l'unité correctement. Comment pourrais-je afficher un m³ similaire dans la facette?

+0

Peut-être que [cet article] (http://stackoverflow.com/ questions/37399450/parsed-labels-long-one-facet-axis-unparsed-labels-along-the-other) sera utile. – lmo

Répondre

4

ajouter labeller = label_parsed à votre fonction facet_wrap, formatez votre appareil comme m^3, et remplacer les espaces dans vos étiquettes avec ~

library(ggplot2) 
dtf <- data.frame(year = rep(1961:2010,2), 
        consumption = cumsum(rnorm(100)), 
        item = rep(c("Tea~bags","Coffee~beans"),each=50), 
        unit = rep(c("T","m^3"),each=50)) 
ggplot(data=dtf)+ 
    geom_line(aes(x=year, y=consumption),size=1) + 
    ylab(expression(paste("Consumption in T or ",m^3))) + 
    scale_x_continuous(breaks = seq(1960,2010,10)) + 
    theme_bw() + facet_wrap(item~unit, scales = "free_y",labeller = label_parsed) 

Example plot from R showing desired solution

+0

Merci, cela fonctionnerait mais j'ai un espace dans mon nom d'article et l'utilisation de 'label_parsed' renvoie une erreur. J'ai modifié l'exemple avec de l'espace dans les noms d'éléments dans ma question. 'Erreur dans l'analyse (text = as.character (values)): : 1: 8: symbole inattendu 1: Grains de café ^'. Je vois que cela a été répondu [ici] (http://stackoverflow.com/questions/26269122/label-parsed-of-facet-grid-in-ggplot2-mixed-with-spaces-and-expressions). –

+1

Essayez 'item = rep (c (" Tea ~ bags "," Coffee ~ beans "), chacun = 50)' –

+1

Ok merci de remplacer les espaces par '~' est la solution. [Une réponse] (http://stackoverflow.com/a/26269348/2641825) suggérait de créer ma propre fonction d'étiqueteuse, mais elle semble être maintenant obsolète "Les étiqueteurs qui prennent des arguments' variable' et 'value' sont maintenant obsolètes." –