1
votes

Comment afficher uniquement les valeurs geom_segment disponibles dans un facet_grid () dans ggplot?

J'essaie de créer un diagramme de nage en utilisant facet_grid () dans ggplot , qui affiche le temps par id code >.

J'ai réussi à visualiser les données avec le code ci-dessous. En utilisant facet_grid () , j'ai pu différencier les ID qui ont une heure> 100 par rapport à heure .

# Create sample dataframe
df <- data.frame(id=seq(1,15,1),
                 time=c(50, 101, 45, 35, 200, 78, 30, 149, 156,58, 39, 10, 65, 38, 20), 
                 test = c(F,T,F,F,T,F,F,T,T,F,F,F,F,F,F))
# Swimmerplot
ggplot(data=df) +
  geom_segment(aes(x=id, xend=id, y=0, yend=time), size = 4) +
  facet_grid(test~.) +
  coord_flip()

Voici la sortie produite, sample_output

Comme le montre la sortie, chaque id est affiché dans les deux facettes.

Je voudrais afficher uniquement les identifiants qui ont une valeur de temps "disponible" par facet_grid. Comment faire cela dans ggplot ? geom_segment est-il le bon geom?


0 commentaires

3 Réponses :


1
votes

C'est probablement ce que vous voulez (ajoutez simplement scale = "free", space = "free" ) qui fait la magie de supprimer les facteurs inutilisés des facettes.

ggplot(data=df) +
  geom_segment(aes(x=as.factor(id), xend=as.factor(id), y=0, yend=time), size = 4) +
  facet_grid(test~., scales = "free", space = "free") +
  coord_flip()


1 commentaires

La réponse, combinée à la suggestion de @yoland ( as.factor (id) , est exactement ce que je cherchais!



1
votes

Vous devez stocker id en tant que facteur ou vecteur de caractères. Je pense aussi qu'il est plus simple d'utiliser geom_bar () avec stat = "identity" . Ce n'est pas joli, mais cela fait ce que vous voulez Je pense:

df <- data.frame(id=seq(1,15,1),time=c(50, 101, 45, 35, 200, 78, 30, 149, 156,58, 39, 10, 65, 38, 20), test = c(F,T,F,F,T,F,F,T,T,F,F,F,F,F,F))
ggplot(data=df, aes(x=factor(id), y=time)) +
  geom_bar(size = 4, stat = "identity", na.rm = T) +
  facet_wrap(~test, scales = "free_y", ncol = 1) +
  coord_flip()

Résultat:

 entrez la description de l'image ici


0 commentaires

0
votes

Voici la solution que j'ai trouvée pour ce que vous recherchez:

ggplot(data=df) +
 geom_bar(aes(x=as.factor(id), y=time), size = 4, stat = "identity") +
 facet_grid(test~., scales = "free") +
 coord_flip()

as.factor change id en un catégoriel variable, et scale = free permet aux facettes d'avoir des échelles différentes, donc elles n'ont plus que les valeurs de id avec des données dans leur facette.

Cette solution ne fonctionnait pas avec geom_segment mais a fonctionné pour geom_bar (..., stat = "identity")


0 commentaires