将格点图和排序数据结合的方法

3
为了创建我的点图,我使用以下文本文件:
 ## 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

第一列是文件名,第二列是差异值,第三列是均方根偏差。数据按差异值升序排序。

我可以使用以下命令创建单个点图:

# 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

@Roman的第一部分是正确的 - 这里有一种稍微聪明的方法来使您想要的顺序得以实现。

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))
gridExtra包中的grid.arrange函数非常方便,可用于排列lattice图形:
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轴限制,除非尝试适当添加不可见点等类似方法。注意:Josh O'Brien提供逐个面板缩放的编辑,Aaron提供了latticeExtra。

好答案——我总是喜欢看到几种做事情的方法。以下是手动添加首选轴限制的方法,当关系为“自由”时:scales=list(x=list(relation="free"), xlim=list(c(0,150), c(0,5)))。(请随意添加到主要答案中)。 - Josh O'Brien
吹毛求疵:在上述轴限制中,括号是错误的;xlim应该在刻度列表之外。 - Aaron left Stack Overflow
另一种类似于grid.arrange的方法是使用latticeExtra库:library(latticeExtra); c(d1, d2) - Aaron left Stack Overflow

2
我觉得你的第一个问题与因子排序有关。这是一个常见的问题,但一旦你学会了因子使用的技巧,它就变成了一个(不错的)特性。这个问题已经在许多地方讨论过,至少在这里这里
我不确定我完全理解你的第二个问题,但通常有两种策略。在基本图形中,您可以使用par参数mfrow打开具有定义行/列的设备,将图形绘制到其中,例如par(mfrow=c(2,1)),这将在两行和一列中绘制两个图形。par(mfrow=c(2,2))将以2x2网格布局显示图表。您还可以考虑其他替代方案,如layoutsplit.screen
在网格图形(如lattice和ggplot2)中,方法不同。您可以在网格中绘制多个图形,使用|facet_grid用于latticeggplot2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接