web-dev-qa-db-fra.com

Comment créer geom_boxplot avec une grande quantité de variables x continues

J'ai un cadre de données qui contient des intervalles numériques sur l'axe des x et des données continues sur l'axe des y sur plusieurs catégories. Initialement, j'ai créé un boxplot en créant des "facteurs" dans les cases de l'axe des abscisses, puis en effectuant un boxplot des données fondues. Données reproductibles:

x <- seq(1,10,by=1)
y1 <- rnorm(10, mean=3)
y2 <- rnorm(10, mean=10)
y3<- rnorm(10, mean=1)
y4<- rnorm(10, mean=8)
y5<- rnorm(10, mean=12)
df <- data.frame(x,y1,y2,y3,y4,y5)
df.m <- melt(df, id="x")

Mon code pour créer les données de l'axe des x en tant que facteur:

df.m $ x <- as.factor (df.m $ x)

Mon ggplot:

ggplot(df.m, aes(x=x, y=value))+
 geom_boxplot(notch=FALSE, outlier.shape=NA, fill="red", alpha=0.1)+
 theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

L'intrigue résultante: The resulting plot:

Le problème est que je ne peux pas utiliser d'espacement numérique sur l'axe des x car celui-ci est classé en tant que facteur, qui a un espacement égal. Je veux pouvoir utiliser quelque chose comme scale_x_continuous pour manipuler les sauts d'axe et les espacements, disons, d'un intervalle de 2, plutôt que d'une boîte à moustaches tous les 1, mais lorsque j'essaie de tracer les données avec l'axe des abscisses "as.numeric ", Je viens d’obtenir une boîte à moustaches de toutes les données:

plot

Avez-vous des suggestions pour obtenir cette courbe de boîte à moustaches continue (la première image) tout en permettant de contrôler les propriétés numériques de l'axe des x? Merci!

14
AndMan21

Voici un moyen d'utiliser les données d'origine que vous avez publiées sur Google - ce qui était en réalité beaucoup plus utile, OMI.

ggplot(df, aes(x=CH, y=value,group=CH))+
  geom_boxplot(notch=FALSE, outlier.shape=NA, fill="red", alpha=0.2)+
  scale_x_log10()

Ainsi, comme @BenBolker l'a dit avant de supprimer sa réponse (??), vous devez laisser la variable x (CH) numérique et définir group=CH dans l'appel à aes(...).

Avec vos données réelles, il y a un autre problème cependant. Votre CH est plus ou moins logarithmiquement espacé. Il y a donc autant de points <1 qu'il y en a entre 1 et 10, etc. ggplot veut que les cases soient de la même taille. plus petite que la largeur de la ligne, et vous ne voyez pas du tout les cases. Changer l’axe des x en échelle logarithmique corrige cela, plus ou moins.

22
jlhoward

Ne faites pas de x un facteur. Vous devez mapper esthétiquement une group qui est un facteur déterminant le cadre auquel la valeur est associée. Heureusement, après la fusion, voici ce que votre colonne variable contient:

ggplot(df.m, aes(x = x, y = value, group = variable)) +
    geom_boxplot()

Étant donné que x est toujours numérique, vous pouvez lui attribuer toutes les valeurs souhaitées dans un niveau variable spécifique et la boîte à moustaches apparaîtra à cet endroit. Ou vous pouvez transformer l'axe x, etc.

0
Gregor