R: Объединение точечных графиков решетки и данных заказа - PullRequest
3 голосов
/ 05 декабря 2011

Для создания моего точечного графика я использую следующий текстовый файл:

 ## 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

1-й столбец - это имя файла, второй столбец разницы, а 3-й - RMSD.Данные были упорядочены, поэтому разница возрастает.

Я могу создавать отдельные точечные графики, используя следующие команды:

# 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)

На графике данные по оси Y упорядочены по имени файла, а данные не отображаются, как в тексте.файл, как я могу заказать ось Y, чтобы отразить порядок в файле данных?

Другая проблема, с которой я сталкиваюсь, это объединение графиков.Как я могу сделать графики так, чтобы у меня были графики в одном ряду, но в двух столбцах.С графиком разницы слева и графиком RMSD справа.

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

@ Часть № 1 Романа верна - вот несколько изящный способ получить заказ так, как вы хотите.

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))

Функция grid.arrange из пакета gridExtra удобна длярасположение графиков решетки:

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)

или (от @Aaron):

library(latticeExtra)
c(d1,d2)

В качестве альтернативы, как @Roman предложил создать небольшие кратные.

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)

Или

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

хотя здесь я действительно не знаю, как установить панель по оси x, кроме как сделать что-то неприятное, например, попытаться соответствующим образом добавить невидимые точки.

edit : масштабирование по панелям от Джоша О'Брайена, latticeExtra от Aaron

2 голосов
/ 05 декабря 2011

Я думаю, что ваш первый вопрос связан с упорядочением факторов. Это обычная проблема, но как только вы изучите уловку, которую используют факторы, она станет (приятной) функцией. Это обсуждалось несколько раз, по крайней мере здесь и здесь .

Я не уверен, что понимаю ваш второй вопрос до всех деталей, но обычно есть две стратегии. В базовой графике вы можете использовать par аргумент mfrow, чтобы открыть устройство с определенными строками / столбцами, в которое вы печатаете графику, например, par(mfrow = c(2, 1)), которая построит два графика в двух строках и одном столбце. par(mfrow = c(2,2)) даст вам графики, расположенные в сетке 2x2. Вы также можете рассмотреть альтернативы, layout и split.screen.

В сеточной графике (например, lattice и ggplot2) подход отличается. Вы можете построить несколько графиков в сетке, используя | или facet_grid для lattice и ggplot2 соответственно.

...