R: Combinaison de diagrammes de points en treillis et de données de tri
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.
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
.