J'essaie de créer un diagramme de nage en utilisant J'ai réussi à visualiser les données avec le code ci-dessous. En utilisant Comme le montre la sortie, chaque Je voudrais afficher uniquement les identifiants qui ont une valeur de temps "disponible" par facet_grid. Comment faire cela dans facet_grid ()
dans ggplot
, qui affiche le temps
par id code >.
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()
id
est affiché dans les deux facettes. ggplot
? geom_segment
est-il le bon geom?
3 Réponses :
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()
La réponse, combinée à la suggestion de @yoland ( as.factor (id)
, est exactement ce que je cherchais!
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:
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")