2010-09-03 4 views
3
ggplot() + 
layer(
data = diamonds, mapping = aes(x = carat, y = price), 
geom = "point", stat = "identity" 
) 

Dans l'exemple ci-dessus, je me demande si je peux spécifier les paramètres de la fonction "aes" par des index.R ggplot: spécifie aes par index

Je sais que le carat et le prix correspondent aux 1er et 8ème éléments du tableau des noms de diamants. Pouvez-vous expliquer pourquoi ce qui suit ne fonctionne pas?

ggplot() + 
layer(
data = diamonds, mapping = aes(x = names(diamonds)[1], y = names(diamonds)[8]), 
geom = "point", stat = "identity" 
) 

Merci, Derek

Répondre

5

La deuxième version ne fonctionne pas parce que names(diamonds)[1] est "carat" et non carat. Utilisez aes_string au lieu de aes pour que cela fonctionne.

ggplot(data = diamonds, mapping = aes_string(x = names(diamonds)[1], y = names(diamonds)[8]), stat = "identity")+ geom_point() 

EDIT: Pour traiter avec des noms qui ont des caractères illégaux, vous devez faire les enfermer dans des contre-apostrophes (c'est le cas chaque fois que vous voulez les utiliser):

dd <- data.frame(1:10, rnorm(1:10)) 
names(dd) <- c("(PDH-TSV 4.0)(ET)(240)", "Y") 
nms <- paste("`", names(dd), "`", sep="") 
ggplot(dd, mapping=aes_string(x=nms[1], y=nms[2])) + geom_point() 
+0

tout aes_string travaille pour des noms de mots dans une trame de données, il semble avoir affaire à des noms qui ont de l'espace et de la ponctuation. Par exemple, il affiche l'erreur suivante lorsque le nom est "(PDH-TSV 4.0) (heure avancée de l'est) (240)" Erreur dans l'analyse (texte = x): constante numérique inattendue dans "(PDH-TSV 4.0 " – defoo

+0

@Derek: J'ai édité la réponse pour résoudre votre problème. – Aniko

Questions connexes