J'essaie de dessiner un nuage de points pour ces données

head(data)
  Subject Length  Verdict
1     2   4575  Partial
2     2   5060  Partial
3     2   8978 5'DEFECT
4     2   7224  Partial
5     2   7224  Partial
6     7   8978 5'DEFECT

J'obtiens un nuage de points en tant que tel:

Scatter dot plot

J'ai des patients 1,2,6,7,10 par exemple. R prend les noms de mes sujets et les utilise comme valeur x. Je veux changer cela pour que les points de données apparaissent au-dessus de chaque patient (non pas traités comme une valeur, mais plutôt comme une catégorie).

Apprécier ton aide!

Voici le code que j'ai écrit pour obtenir ce nuage de points:

ggplot(final,
       aes(x=Subject,y=Length,colour=Verdict,shape=Verdict), group=Subject) +
  geom_point(position=position_jitter(width=0.1,height=0)) +
  scale_shape_manual(values=c(5,0,1,4,6)) +
  scale_colour_manual(values=c("blue","red","green","black","violet")) +
  scale_y_continuous(breaks=c(2000,4000,6000,8000,10000)) +
  labs(y="Amplicon Size in bps")
r
1
Radwa Sharaf 5 avril 2017 à 03:13

2 réponses

Meilleure réponse

En utilisant les exemples de données que vous avez publiés (les 6 observations), vous pouvez le faire facilement avec as.factor ou as.character. Je recommande de convertir d'abord votre variable Subject en caractère (car il semble que vous ne vouliez pas qu'elle soit traitée comme numérique de toute façon).

Cela devrait fonctionner:

data$Subject <- as.character(data$Subject)

ggplot(data,
       aes(x=Subject,y=Length,colour=Verdict,shape=Verdict), group=Subject) +
  geom_point(position=position_jitter(width=0.1,height=0)) +
  scale_shape_manual(values=c(5,0,1,4,6)) +
  scale_colour_manual(values=c("blue","red","green","black","violet")) +
  scale_y_continuous(breaks=c(2000,4000,6000,8000,10000)) +
  labs(y="Amplicon Size in bps")

enter image description here

Données:

data <- structure(list(Subject = c(2L, 2L, 2L, 2L, 2L, 7L), Length = 
                  c(4575L, 5060L, 8978L, 7224L, 7224L, 8978L), Verdict = c("Partial", "Partial", 
                  "5'DEFECT", "Partial", "Partial", "5'DEFECT")), .Names = c("Subject", 
                  "Length", "Verdict"), row.names = c(NA, -6L), class = "data.frame")
0
Mike H. 5 avril 2017 à 00:28

Vous pouvez utiliser as.factor(data$Subject) et scale_x_discrete("Subject"). Voici un exemple factice:

data <- read.table(textConnection('i    Subject Length  Verdict
1   2   4575    Partial
2   2   5060    Partial
3   2   8978    5DEFECT
4   2   7224    Partial
5   2   7224    Partial
6   7   8978    5DEFECT'), header = TRUE, stringsAsFactors = FALSE)

data$Subject <- as.factor(data$Subject)
p = ggplot(data) + geom_point(aes(x=Subject,y=Length, colour=Verdict))+ scale_shape_manual(values= c(5,0,1,4,6))
p = p + scale_colour_manual(values=c("blue","red","green","black","violet"))
p = p+ scale_x_discrete("Subject")
p = p + scale_y_continuous(breaks=c(2000,4000,6000,8000,10000))+labs(y="Amplicon Size in bps")
p
0
M_Shimal 19 avril 2017 à 21:29