R: Combinaison de diagrammes de points en treillis et de données de tri

StackOverflow https://stackoverflow.com/questions/8386823

  •  28-10-2019
  •  | 
  •  

Question

Pour créer mon dotplot, j'utilise le fichier texte suivant:

 ## filename  difference    RMSD
    1bso.pdb         1.0  0.5645
 1cj51.9.pdb         2.0  3.5596
 1cj51.1.pdb         3.0  3.5573
    3qzj.pdb         3.0  0.8302
    1bsy.pdb         4.0  0.5387
 1cj51.5.pdb         8.0  3.9864
    2gj5.pdb        10.0  0.8446
1cj51.10.pdb        11.0  3.5914
    1uz2.pdb        12.0  1.7741
    2blg.pdb        12.0  0.5449

La 1ère colonne est le nom du fichier, la deuxième colonne de la différence et la 3ème est le RMSD.Les données ont été classées de sorte que la différence est croissante.

Je peux créer des tracés de points individuels à l'aide des commandes suivantes:

# This plots the difference
library(lattice)
data <- read.table("~/Documents/Beta_test_area/pa.txt", header=F, sep="\t")
dotplot(V1~V2, xlim=c(0, 150), xlab="CCS Difference", data=data)

# This plots the RMSD
dotplot(V1~V3, xlim=c(0, 5), xlab="RMSD", data=data)

Sur le graphique, les données sur l'axe Y sont classées par nom de fichier et les données ne sont pas tracées comme dans le fichier texte, comment puis-je ordonner l'axe Y pour refléter l'ordre dans le fichier de données?

L'autre problème que j'ai est de combiner les parcelles.Comment puis-je faire les parcelles de sorte que j'ai les parcelles sur une ligne mais sur deux colonnes.Avec le tracé des différences à gauche et le tracé RMSD à droite.

Était-ce utile?

La solution

La partie n ° 1 de @ Roman est correcte - voici une façon un peu astucieuse d'obtenir l'ordre comme vous le souhaitez.

dat <- read.table(textConnection("
filename    diff RMSD
1bso.pdb    1.0 0.5645
1cj51.9.pdb 2.0 3.5596
1cj51.1.pdb 3.0 3.5573
3qzj.pdb    3.0 0.8302
1bsy.pdb    4.0 0.5387
1cj51.5.pdb 8.0 3.9864
2gj5.pdb    10.0    0.8446
1cj51.10.pdb    11.0    3.5914
1uz2.pdb    12.0    1.7741
2blg.pdb    12.0    0.5449"),
           header=TRUE)
dat <- transform(dat,filename=factor(as.character(filename),
                       levels=filename))

La fonction grid.arrange du paquet gridExtra est pratique pour organiser les tracés en treillis:

library(lattice)
d1 <- dotplot(filename~diff, xlim=c(0, 150), xlab="CCS Difference", data=dat)

# This plots the RMSD
d2 <- dotplot(filename~RMSD, xlim=c(0, 5), xlab="RMSD", data=dat)

library(gridExtra)
grid.arrange(d1,d2,nrow=1)

Ou (de @Aaron):

library(latticeExtra)
c(d1,d2)

Alternativement, comme @Roman l'a suggéré, vous pouvez créer de petits multiples.

library(reshape)
m <- melt(dat)
dotplot(filename~value|variable,
       scales=list(x=list(relation="free")), xlim=list(c(0,150), c(0,5)),
       data=m)

Ou

library(ggplot2)
g1 <- qplot(value,filename,data=m)+
  facet_grid(.~variable,scale="free")+theme_bw()+
  opts(panel.margin=unit(0,"lines"))

bien qu'ici, je ne sais vraiment pas comment définir les limites de l'axe des x panneau par panneau, à part faire quelque chose de désagréable comme essayer d'ajouter des points invisibles de manière appropriée.

modifier : mise à l'échelle panneau par panneau de Josh O'Brien, latticeExtra d'Aaron

Autres conseils

Je pense que votre première question concerne l’ordre des facteurs. C'est un problème courant, mais une fois que vous avez appris l'astuce que les facteurs utilisent, cela devient une (belle) fonctionnalité. Cela a été discuté à plusieurs reprises, au moins ici et ici .

Je ne suis pas sûr de comprendre votre deuxième question jusque dans les détails, mais il existe généralement deux stratégies. Dans les graphiques de base, vous pouvez utiliser par argumentmfrow pour ouvrir un périphérique avec des lignes / colonnes définies dans lesquelles vous tracez vos graphiques, par ex. par(mfrow = c(2, 1)) qui tracera deux graphiques sur deux lignes et une colonne. par(mfrow = c(2,2)) vous donnera des graphiques disposés en grille 2x2. Vous pouvez également envisager des alternatives, layout et split.screen.

Dans les graphiques en grille (pensez lattice et ggplot2), l'approche est différente. Vous pouvez tracer un certain nombre de graphiques dans une grille, en utilisant respectivement | ou facet_grid pour lattice et ggplot2.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top