0

我刚刚编写了我的第一个 R 脚本。我需要为组中的每个项目制作大量图表,并认为循环浏览这些项目以创建 pdf 会更快。使用几乎相同的代码,当我使用 for 循环时,我将 y 轴的信息放在图的中间(不好)。如果我一次创建一个 pdf(无循环),则图的中间不会放置任何文本(好)。有人可以解释为什么这两种方法之间的图表存在差异,以及如何摆脱循环pdf中出现的居中文本。先感谢您。

要创建单个图,我使用以下代码:

require(ggplot2)
require(reshape)
require(lattice)

header = scan('out_ordered.txt', nlines = 1, what = character())
header = header[3:length(header)]
data = read.table('out_ordered.txt', skip = 2, header = FALSE, row.names = 1)
names(data) = header
tdata = data.frame(t(data))
names(tdata)
pdf (file='Different.pdf')
plot(Bacteroidetes ~ Bacteroidetes, data = tdata, pch = 16, main = 'Bacteroidetes', xlab = 'Environment', ylab = 'Counts', axes = FALSE, las = 2)
original.parameters<-par()
par(xaxt='n')
lablist<-as.vector(c(header[1:length(header)]))
axis(1, at=1:length(header), labels = FALSE)
axis(2, at=0:63)
text(seq(1, length(header), by=1), par('usr')[3] - 0.2, labels = lablist, srt = 90, pos = 1, xpd = TRUE, offset = 2.5)
box()
dev.off()

x 轴上的标签存在一些间距问题,通常可以使用一些按钮来表达其耀斑,但它在正确的轨道上。

如果我使用循环,我使用以下代码:

#!/usr/bin/Rscript 
 # change the working directory in R to the place where you have the input file.

require(ggplot2)
require(reshape)
require(lattice)

header = scan('out_ordered.txt', nlines = 1, what = character())
header = header[3:length(header)]
data = read.table('out_ordered.txt', skip = 2, header = FALSE, row.names = 1)
names(data) = header
tdata = data.frame(t(data))
names(tdata)

for(i in names(tdata))
{
        pdf(file = paste(i, '.pdf', sep = ''))
        plot(get(i) ~ get(i), data = tdata, pch = 16, main = get(i) , xlab = 'Environment', ylab = 'Counts', axes = FALSE, las = 2)
        original.parameters<-par()
        par(xaxt='n')
        lablist<-as.vector(c(header[1:length(header)]))
        lablist
        axis(1, at=1:length(header), labels = FALSE)
        axis(2, at=0:65)
        text(seq(1, length(header), by=1), par('usr')[3] - 0.2, labels = lablist, srt = 90, pos = 1, xpd = TRUE, offset = 2.5)
        box(which = 'plot')

        dev.off()
}

以下是图片:

在此处输入图像描述 在此处输入图像描述

第一个图像是在循环过程中创建的,另一个是独立的图。

4

2 回答 2

0

可能不是最优雅的,它没有回答我的问题...我删除了 for 循环,在我想要的项目的 bash 中创建了一个数组并循环遍历它 - 每次调用 R 脚本时将数组项作为 R脚本参数。不漂亮——但它有效。

于 2013-08-02T14:53:41.663 回答
0

在你有的循环中main = get(i),它获取值;这就是为什么这些数字出现在循环版本中的原因。相反,您只想main=i.

于 2013-08-02T15:33:59.933 回答