2016-07-25 1 views
0

Je veux inclure des symboles mathématiques dans les titres du panneau pour cette parcelle stratigraphique:Utilisez des symboles mathématiques dans les titres de panneau pour complot stratigraphique

library(analogue) 
data(V12.122) 
Depths <- as.numeric(rownames(V12.122)) 
names(V12.122) 

(plt <- Stratiplot(Depths ~ O.univ + G.ruber + G.tenel + G.pacR, 
        data = V12.122, 
        type = c("h","l","g"), 
        zones = 400)) 

plt 

enter image description here

Par exemple, je veux avoir ce texte en place de "O.univ" etc .:

enter image description here

J'ai utilisé ce code pour ce texte:

plot(1, type="n", axes=FALSE, ann=FALSE) 
title(line = -1, main = expression(phantom()^14*C~years~BP)) 
title(line = -3, main = expression(delta^18*O)) 
title(line = -5, main = expression(paste("TP ", mu,"g l"^-1))) 
title(line = -10, main = expression("very long title \n with \n line breaks")) 

Mais si je tente de mettre à jour les colnames de la trame de données transmise à Stratiplot, le code est analysé et nous ne sommes pas la mise en forme de texte correct:

V12.122 <- V12.122[, 1:4] 
names(V12.122)[1] <- expression(phantom()^14*C~years~BP) 
names(V12.122)[2] <- expression(delta^18*O) 
names(V12.122)[3] <- expression(paste("TP ", mu,"g l"^-1)) 

(plt <- Stratiplot(Depths ~ ., 
        data = V12.122, 
        type = c("h","l","g"), 
        zones = 400)) 

plt 

enter image description here

Comment puis-je obtenir Stratiplot pour analyser les expressions dans les colnames et les formater correctement dans l'intrigue?

J'ai essayé de regarder à travers str(plt) pour voir où les titres du panneau sont stockés, mais sans succès:

text <- expression(phantom()^14*C~years~BP) 
plt$condlevels$ind[1] <- text 
names(plt$packet.sizes)[1] <- text 
names(plt$par.settings$layout.widths$panel)[1] <- text 

Répondre

4

Vous ne pouvez pas réellement faire cela dans la version actuelle de analogique; la fonction fait trop de gâchis avec les données pour que les expressions restent non évaluées avant le traçage. Je pourrais probablement comprendre cela pour permettre des expressions comme names de l'objet argument data, mais il est plus facile de permettre aux utilisateurs de passer un vecteur d'étiquettes qu'ils veulent pour les variables.

Ceci est now implemented dans la version de développement du paquet sur github, et je vais pousser cela à CRAN au début de la semaine prochaine.

Cette modification implémente un nouvel argument labelValues qui prend un vecteur d'étiquettes pour l'étiquetage de l'axe supérieur. Cela peut être un vecteur d'expressions.

Voici une illustration de l'utilisation:

library("analogue") 
set.seed(1) 
df <- setNames(data.frame(matrix(rnorm(200 * 3), ncol = 3)), 
       c("d13C", "d15N", "d18O")) 
df <- transform(df, Age = 1:200) 
exprs <- expression(delta^{13}*C, # label for 1st variable 
        delta^{15}*N, # label for 2nd variable 
        delta^{18}*O) # label for 3rd variable 
Stratiplot(Age ~ ., data = df, labelValues = exprs, varTypes = "absolute", type = "h") 

qui produit

enter image description here

Notez que ceci est juste une première passe; Je suis sûr que je n'ai pas pris en compte toute réorganisation qui se passe avec sort et svar etc. si elles sont utilisées.

+2

Toujours aimer quand les ajouts de fonctionnalités sont issus d'une question de débordement de pile. – shayaa

1

jamais utilisé des parcelles de treillis, mais je pensais que la chance d'apprendre quelque chose devrait être la peine. Ça a pris trop de temps pour comprendre.

text <- "c(expression(phantom()^14*C~years~BP),expression(delta^18*O))" 

strip = strip.custom(factor.levels=eval(parse(text=text))) 

plt <- Stratiplot(Depths ~ ., 
        data = V12.122[, 1:4], 
        type = c("h","l","g"), 
        zones = 400, 
        strip = strip) 

enter image description here

Hope this vous permet de démarrer.

+0

Quelque chose à faire avec 'par.strip.text' dans les arguments de' xyplot'? – shayaa

+0

Merci d'avoir jeté un coup d'oeil. Je ne veux pas de texte dans les bandes, je veux modifier le texte au-dessus de chaque panneau. Je ne vois pas où 'str (plt)' ces étiquettes sont stockées! – Ben

+0

Ils ne sont définitivement pas là, ils sont dans les arguments optionnels de l'appel de 'xyplot' dans la méthode' Stratiplot' par défaut. J'ai trouvé le code dans le paquet en utilisant 'getAnywhere (" Stratiplot.default ")'. – shayaa