J'ai rencontré une pierre d'achoppement en écrivant une fonction ggplot. J'essaie de changer les étiquettes de facettes dans un tracé ggplot facet_wrap .... mais c'est plus compliqué que je ne le pensais ...
Les données que j'utilise sont accessibles ici
str(ggdata)
'data.frame': 72 obs. of 8 variables:
$ Season : Factor w/ 3 levels "Autumn","Spring",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Site : Factor w/ 27 levels "Afon Cadnant",..: 13 13 13 13 13 13 13 13 13 13 ...
$ Isotope: Factor w/ 4 levels "14CAA","14CGlu",..: 1 1 1 1 1 1 2 2 2 2 ...
$ Time : int 0 2 5 24 48 72 0 2 5 24 ...
$ n : int 3 3 3 3 3 3 3 3 3 3 ...
$ mean : num 100 88.4 80.7 40.5 27.6 ...
$ sd : num 0 1.74 2.85 2.58 2.55 ...
$ se : num 0 1 1.65 1.49 1.47 ...
J'ai écrit la fonction suivante pour créer le ggplot qui utilise les niveaux de facteur isotopique pour étiqueter les facettes:
plot_func <- function(T) {site_plots <- ggplot(data = T) + geom_point(aes(Time, mean, colour = Season, shape = Season)) +
geom_line(aes(Time, mean, colour = Season, linetype = Season)) +
geom_errorbar(aes(Time, mean, ymax = (mean + se), ymin = (mean - se)), width = 2) +
labs(title = T$Site[1], y = "Percentage of isotope remaining in solution", x = "Time (h)") +
scale_x_continuous(breaks=c(0, 24, 48, 72)) +
scale_y_continuous(limits=c(0,115), breaks = c(0,25,50,75,100)) +
theme(axis.title.y = element_text(vjust = 5)) +
theme(axis.title.x = element_text(vjust = -5)) + theme(plot.title = element_text(vjust = -10)) +
theme_bw() + facet_wrap(~Isotope, ncol =2)
print(site_plots)
ggsave(plot = site_plots, filename = paste(T$Site[1], ".pdf"),
path = "C:/Users/afs61d/Dropbox/Academic/R/Practice datasets/Helens_data/Site_Isotope_Season_plots/",
width = 9, height = 7, dpi = 300)}
Résultat dans ce joli graphique:
Ce qui est bien, mais je veux changer les étiquettes des facettes maintenant ... Après avoir fouillé google, j'ai pensé que je pourrais être en mesure d'utiliser la fonction labeller
comme argument pour passer à facet_wrap
. Après une heure frustrante, j'ai découvert que cela ne fonctionne qu'avec facet_grid
!!! ??? Donc, une autre méthode était de changer les noms des niveaux de facteurs, alors donnez-moi les étiquettes de facettes que je veux:
gdata$Isotope <- revalue(x = ggdata$Isotope,
c("14CAA" = " 14C Amino Acids", "14CGlu" = "14C Glucose",
"14cGlu6P" = "14C Glucose-6-phosphate", "33P" = "33P Phosphate"))
Cela fonctionne, mais le problème que j'ai maintenant, c'est que je veux que les numéros dans les étiquettes soient super-scriptés. Quelqu'un peut-il suggérer la meilleure façon d'y parvenir? Merci
Parvenez à le trier! A eu du mal à installer la version de développement de ggplot
mais après avoir installé curl
et devtools
et réinstallé scales
il a fonctionné. J'ai essayé la réponse @ eipi10 mais je n'ai pas réussi à le faire fonctionner, j'ai donc changé les noms d'étiquette de facteur d'une manière différente:
ggdata$Isotope <- factor(ggdata$Isotope, labels = c("NULL^14*C~Amino~Acids",
"NULL^14*C~Glucose", "NULL^14*C~Glucose-6-phosphate", "NULL^33*P~Phosphate"))
J'ai ensuite ajusté la fonction ggplot pour passer labeller = label_parsed
à la facet_wrap
fonction:
plot_func <- function(T) {site_plots <- ggplot(data = T) + geom_point(aes(Time, mean, colour = Season, shape = Season)) +
geom_line(aes(Time, mean, colour = Season, linetype = Season)) +
geom_errorbar(aes(Time, mean, ymax = (mean + se), ymin = (mean - se)), width = 2) +
labs(title = T$Site[1], y = "Percentage of isotope remaining in solution", x = "Time (h)") +
scale_x_continuous(breaks=c(0, 24, 48, 72)) +
scale_y_continuous(limits=c(0,115), breaks = c(0,25,50,75,100)) +
theme(axis.title.y = element_text(vjust = 5)) +
theme(axis.title.x = element_text(vjust = -5)) + theme(plot.title = element_text(vjust = -10)) +
theme_bw() + facet_wrap(~Isotope, ncol =2, labeller = label_parsed)
print(site_plots)
ggsave(plot = site_plots, filename = paste(T$Site[1], ".pdf"),
path = "C:/Users/afs61d/Dropbox/Academic/R/Practice datasets/Helens_data/Site_Isotope_Season_plots/",
width = 9, height = 7, dpi = 300)}
Passer le ggdata
au plot_func
me donne les graphiques ci-dessous avec les étiquettes de facettes correctes.
Définissez les étiquettes de facette sur les expressions appropriées, puis utilisez la fonction labeller
label_parsed
pour vous assurer qu'ils s'affichent correctement. Voici un exemple, en utilisant le cadre de données iris
intégré:
data(iris)
iris$Species = as.character(iris$Species)
iris$Species[iris$Species == "virginica"] = "NULL^14*C~Amino~Acids"
ggplot(iris, aes(Sepal.Width, Sepal.Length)) +
geom_point() +
facet_wrap(~ Species, labeller=label_parsed)
Vous devez ajouter le NULL
avant ^14*C
ou vous obtiendrez une erreur en raison d'avoir ^
comme caractère initial. *
et ~
marque les limites de chaque partie de l'expression, selon que vous ne voulez pas ou voulez un espace entre chaque partie.
Au moment de la rédaction de ce document (12 décembre 2015), vous devez utiliser la version de développement de ggplot2
pour que cela fonctionne avec facet_wrap
. Cependant, cette fonctionnalité sera vraisemblablement bientôt incorporée dans une version régulière du package.