我刚写了我的第一个R剧本。我需要为一个组中的每个项目做大量的图表,并且认为循环遍历项目创建pdfs会更快。使用几乎相同的代码,当我使用for循环时,我得到了y轴的信息,放在图的中间(坏消息)。如果我一次创建一个pdf (sans循环),没有文本放置在情节的中间(很好)。有人能解释一下为什么这两种方法在图形上有区别,以及如何消除在环pdfs中出现的居中文本。提前谢谢你。
要创建一个单独的地块,我使用下面的代码:
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()
}以下是图片:


第一个图像是在循环过程中创建的,另一个是作为独立的地块创建的。
发布于 2013-08-02 15:33:59
在循环中有main = get(i),它获取值;这就是为什么这些数字出现在循环版本中。相反,你只想要main=i。
发布于 2013-08-02 14:53:41
可能不是最优雅的,而且它没有回答我的问题.我删除了for-循环,在bash中创建了一个数组,并通过它循环--每次调用R脚本时,数组项都作为R脚本参数。不漂亮
https://stackoverflow.com/questions/17996140
复制相似问题