2013-08-01 25 views
0

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

要创建一个单一的情节,我用下面的代码:

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

这里是图像:

enter image description hereenter image description here

第一图像是在循环过程中产生的一个,另一个作为独立的情节。

+0

你是否真的在代码中的任何地方使用ggplot2,reshape或lattice? – Thomas

回答

0

在循环中你有main = get(i),它获取值;这就是为什么这些数字出现在循环版本中。你只需要main=i

+0

谢谢@Aaron,解决了问题并回答了我的问题。 – cer

0

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