簡體   English   中英

在R for循環和單個R圖中創建的圖形中的差異(圖形)

[英]Discrepancy in graphs created in R for-loop and single R plot (graph)

我剛剛寫了我的第一個R腳本。 我需要為組中的每個項目制作大量圖表,並認為遍歷這些項目以創建pdf更快。 使用幾乎相同的代碼,當我使用for循環時,我將來自y軸的信息放置在繪圖的中間(錯誤)。 如果我一次創建一個pdf(sans循環),則圖的中間不會放置任何文本(良好)。 有人可以解釋為什么這兩種方法的圖形之間存在差異,以及如何消除循環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()
}

這是圖像:

在此處輸入圖片說明在此處輸入圖片說明

第一個圖像是在循環過程中創建的,另一個圖像是獨立圖。

可能不是最優雅的,並且它沒有回答我的問題...我刪除了for循環,在bash中創建了想要的項的數組並循環遍歷-每次調用R腳本並將數組項作為R腳本參數。 不太漂亮-但可以。

在循環中,您有main = get(i) ,它獲取值; 這就是為什么這些數字顯示在循環版本中的原因。 相反,您只需要main=i

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM