fonction - ggplot2 gallery



Comment gérer les espaces dans les noms de colonnes? (2)

Je sais qu'il est préférable que les noms de variables ne contiennent pas d'espaces. J'ai une situation où j'ai besoin de graphiques de qualité publication, donc les axes et les légendes doivent avoir des étiquettes correctement formatées, c'est-à-dire avec des espaces. Ainsi, par exemple, en développement, je pourrais avoir des variables appelées "Pct.On.OAC" et Age.Group, mais dans mon intrigue finale, j'ai besoin de "% sur OAC" et "Groupe d'âge" pour apparaître:

'data.frame':   22 obs. of  3 variables:
 $ % on OAC           : Factor w/ 11 levels "0","0.1-9.9",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Age Group          : Factor w/ 2 levels "Aged 80 and over",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Number of Practices: int  47 5 33 98 287 543 516 222 67 14 ...

Mais quand j'essaie de tracer ces:

ggplot(dt.m, aes(x=`% on OAC`,y=`Number of Practices`, fill=`Age Group`)) +
    geom_bar()
)

aucun problème avec cela. Mais quand j'ajoute une facette:

ggplot(dt.m, aes(x=`% on OAC`,y=`Number of Practices`, fill=`Age Group`)) +
    geom_bar() +
    facet_grid(`Age Group`~ .) 

Je reçois Error in [.data.frame (base, names(rows)) : undefined columns selected

Si je change de Age Group à Age.Group alors cela fonctionne bien, mais comme je l'ai dit, je ne veux pas que le point apparaisse dans la légende du titre.

Donc mes questions sont:

  1. Y at-il une solution de contournement pour le problème avec la facette?
  2. Y a-t-il une meilleure approche générale pour traiter le problème des espaces (et d'autres caractères) dans les noms de variables quand je veux que l'intrigue finale les inclue? Je suppose que je peux les contourner manuellement, mais cela semble être beaucoup plus facile.

https://src-bin.com


Answer #1

C'est un "bug" dans le paquet ggplot2 qui vient du fait que la fonction as.data.frame() dans la fonction interne ggplot2 quoted_df convertit les noms en noms syntaxiquement valides. Ces noms syntaxiquement valides ne peuvent pas être trouvés dans l'image originale, d'où l'erreur.

Pour te rappeler:

les noms syntaxiquement valides sont constitués de lettres, de chiffres et de caractères pointillés ou soulignés, et commencent par une lettre ou le point (mais le point ne peut pas être suivi d'un nombre)

Il y a une raison à cela. Il existe également une raison pour laquelle ggplot vous permet de définir des étiquettes à l'aide de labs , par exemple en utilisant l'ensemble de données factice suivant avec des noms valides:

X <-data.frame(
  PonOAC = rep(c('a','b','c','d'),2),
  AgeGroup = rep(c("over 80",'under 80'),each=4),
  NumberofPractices = rpois(8,70)
  ) 

Vous pouvez utiliser les laboratoires à la fin pour faire fonctionner ce code

ggplot(X, aes(x=PonOAC,y=NumberofPractices, fill=AgeGroup)) +
  geom_bar() +
  facet_grid(AgeGroup~ .) + 
  labs(x="% on OAC", y="Number of Practices",fill = "Age Group")

Produire


Answer #2

Vous avez demandé "Y at-il une meilleure approche générale pour traiter le problème des espaces (et d'autres caractères) dans les noms de variables" et oui, il y en a quelques-uns:

  • Ne les utilisez pas comme les choses vont se casser comme vous l'avez expérimenté ici
  • Utilisez la fonction make.names() pour créer des noms sécurisés; ceci est également utilisé par R pour créer des identifiants (par exemple en utilisant des underscores pour les espaces, etc.)
  • Si vous le devez, protégez les identificateurs non sécurisés avec des guillemets.

Exemple pour les deux derniers points:

R> myvec <- list("foo"=3.14, "some bar"=2.22)
R> myvec$'some bar' * 2
[1] 4.44
R> make.names(names(myvec))
[1] "foo"      "some.bar"
R> 




ggplot2