2017-08-28 105 views
0

我想循環一段由ggplot2生成圖的代碼。我的數據集看起來像「prot」示例,jut prot是一個入口,在原始數據中我有更多的入口。 單個加入它看起來不錯。就循環而言,我認爲它會在每個頁面中放置一個迭代文件,但它不包含.pdf 。這個單一的陰謀已經創建了聯合陰謀,所以我現在不知道如何以及在哪裏放置facet_wrap或facet_grid? 或者有其他解決方案? 幫助,請幫助。如何在ggplot2中循環以獲得每頁多個圖

'library(ggplot2) 

ggplot(prot, aes(factor(genotype), value, fill = Light)) + 
geom_bar(stat="identity", position = "dodge") + 
scale_fill_brewer(palette = "Set1") 




    '> prot 
    Accession genotype   variable  value Light 
    966 AT1G01050  WT ML_WT_Dejan_05 219971.1 ML 
    2828 AT1G01050  WT ML_WT_Dejan_06 286308.6 ML 
    4690 AT1G01050  WT ML_WT_Dejan_14 1177873.5 ML 
    6552 AT1G01050  m  ML_m_Dejan_08 861982.0 ML 
    8414 AT1G01050  m  ML_m_Dejan_10 3786163.0 ML 
    10276 AT1G01050  m  ML_m_Dejan_11 1289267.7 ML 
    12138 AT1G01050  f  ML_f_Dejan_01 400419.3 ML 
    14000 AT1G01050  f  ML_f_Dejan_04 929297.2 ML 
    15862 AT1G01050  f  ML_f_Dejan_09 12245991.9 ML 
    17724 AT1G01050  ntrc ML_ntrc_Dejan_02 785773.5 ML 
    19586 AT1G01050  ntrc ML_ntrc_Dejan_03 971133.1 ML 
    21448 AT1G01050  ntrc ML_ntrc_dejan7 592207.0 ML 
    23310 AT1G01050  ntrc ML_ntrc_Dejan_12R 347127.5 ML 
    25204 AT1G01050  WT FL_WT_Dejan_20 131817.0 FL 
    27134 AT1G01050  WT FL_WT_Dejan_39 560424.7 FL 
    29064 AT1G01050  WT FL_WT_Dejan_33 9304183.7 FL 
    30994 AT1G01050  WT FL_WT_Dejan_34 647452.4 FL 
    32924 AT1G01050  m  FL_m_Dejan_21 712381.5 FL 
    34854 AT1G01050  m  FL_m_Dejan_26 6089158.8 FL 
    36784 AT1G01050  m  FL_m_Dejan_28 11341334.1 FL 
    38714 AT1G01050  f  FL_f_Dejan_19 13140258.2 FL 
    40644 AT1G01050  f  FL_f_Dejan_31 11256554.9 FL 
    42574 AT1G01050  f  FL_f_Dejan_35 1621509.9 FL 
    44504 AT1G01050  f  FL_f_Dejan37 392228.2 FL 
    46434 AT1G01050  ntrc FL_ntrc_Dejan_30 9069074.8 FL 
    48364 AT1G01050  ntrc FL_ntrc_Dejan_38 562403.6 FL 
    50294 AT1G01050  ntrc FL_ntrc_Dejan29 175258.6 FL 
    79347 AT1G01050  WT LL_WT_Dejan_41 2443625.6 LL 
    81783 AT1G01050  WT LL_WT_Dejan_43 8529143.7 LL 
    84219 AT1G01050  WT LL_WT_Dejan_49 11054552.6 LL 
    86655 AT1G01050  m  LL_m_Dejan_44 14325152.0 LL 
    89091 AT1G01050  m  LL_m_Dejan_45 13114486.4 LL 
    91527 AT1G01050  m  LL_m_Dejan_54 8250430.1 LL 
    93963 AT1G01050  f  LL_f_Dejan_47 12431354.5 LL 
    96399 AT1G01050  f  LL_f_Dejan_48 11884118.5 LL 
    98835 AT1G01050  f  LL_f_Dejan_53 8408509.1 LL 
    101271 AT1G01050  ntrc LL_ntrc_Dejan_46 12214783.1 LL 
    103707 AT1G01050  ntrc LL_ntrc_Dejan_50 1286828.3 LL 
    106143 AT1G01050  ntrc LL_ntrc_Dejan_42 1819043.9 LL 

    plots<- list() 

    pdf("TEST_boxplot.pdf") 
    IDs<-unique(prot$Accession) 
    for (i in 1:length(IDs)){ 
    temp <- prot[(prot$Accession)==IDs[i],] 
    p<- ggplot(temp, aes(factor(genotype), value, fill = Light)) + 
    geom_bar(stat="identity", position = "dodge") + 
    scale_fill_brewer(palette = "Set1")+ 
    ggtitle(as.character(i)) 
    plots[[i]] <- p 
    #plots[[paste(i)]] = p 
    #multiplot(plotlist = plots, cols = 1) 
    } 
    dev.off() 
+0

加上'打印(P)'在循環 –

+0

嗯,當我設置I = 2算了筆檢查並運行打印(P)的環我剛空地塊......我也已經添加了在ggtitle後打印(p)。沒有工作 – tralala

+0

如果您使用上述'prot'數據集,則pdf文件中的結果頁數(和圖)爲1('Accession'只有1個級別)。嘗試使用具有更多級別的數據集來進行「登錄」。我做了一些測試和工作。 –

回答

1

我生成prot玩具數據集有兩個水平Accession
下面的代碼在TEST_boxplot.pdf文件的兩頁上打印2個圖形。
Here是生成的文件。

library(ggplot2) 

prot1 <- read.table(text=" 
n Accession genotype   variable  value Light 
    966 AT1G01050  WT ML_WT_Dejan_05 219971.1 ML 
    2828 AT1G01050  WT ML_WT_Dejan_06 286308.6 ML 
    4690 AT1G01050  WT ML_WT_Dejan_14 1177873.5 ML 
    6552 AT1G01050  m  ML_m_Dejan_08 861982.0 ML 
    8414 AT1G01050  m  ML_m_Dejan_10 3786163.0 ML 
    10276 AT1G01050  m  ML_m_Dejan_11 1289267.7 ML 
    12138 AT1G01050  f  ML_f_Dejan_01 400419.3 ML 
    14000 AT1G01050  f  ML_f_Dejan_04 929297.2 ML 
    15862 AT1G01050  f  ML_f_Dejan_09 12245991.9 ML 
    17724 AT1G01050  ntrc ML_ntrc_Dejan_02 785773.5 ML 
    19586 AT1G01050  ntrc ML_ntrc_Dejan_03 971133.1 ML 
    21448 AT1G01050  ntrc ML_ntrc_dejan7 592207.0 ML 
    23310 AT1G01050  ntrc ML_ntrc_Dejan_12R 347127.5 ML 
    25204 AT1G01050  WT FL_WT_Dejan_20 131817.0 FL 
    27134 AT1G01050  WT FL_WT_Dejan_39 560424.7 FL 
    29064 AT1G01050  WT FL_WT_Dejan_33 9304183.7 FL 
    30994 AT1G01050  WT FL_WT_Dejan_34 647452.4 FL 
    32924 AT1G01050  m  FL_m_Dejan_21 712381.5 FL 
    34854 AT1G01050  m  FL_m_Dejan_26 6089158.8 FL 
    36784 AT1G01050  m  FL_m_Dejan_28 11341334.1 FL 
    38714 AT1G01050  f  FL_f_Dejan_19 13140258.2 FL 
    40644 AT1G01050  f  FL_f_Dejan_31 11256554.9 FL 
    42574 AT1G01050  f  FL_f_Dejan_35 1621509.9 FL 
    44504 AT1G01050  f  FL_f_Dejan37 392228.2 FL 
    46434 AT1G01050  ntrc FL_ntrc_Dejan_30 9069074.8 FL 
    48364 AT1G01050  ntrc FL_ntrc_Dejan_38 562403.6 FL 
    50294 AT1G01050  ntrc FL_ntrc_Dejan29 175258.6 FL 
    79347 AT1G01050  WT LL_WT_Dejan_41 2443625.6 LL 
    81783 AT1G01050  WT LL_WT_Dejan_43 8529143.7 LL 
    84219 AT1G01050  WT LL_WT_Dejan_49 11054552.6 LL 
    86655 AT1G01050  m  LL_m_Dejan_44 14325152.0 LL 
    89091 AT1G01050  m  LL_m_Dejan_45 13114486.4 LL 
    91527 AT1G01050  m  LL_m_Dejan_54 8250430.1 LL 
    93963 AT1G01050  f  LL_f_Dejan_47 12431354.5 LL 
    96399 AT1G01050  f  LL_f_Dejan_48 11884118.5 LL 
    98835 AT1G01050  f  LL_f_Dejan_53 8408509.1 LL 
    101271 AT1G01050  ntrc LL_ntrc_Dejan_46 12214783.1 LL 
    103707 AT1G01050  ntrc LL_ntrc_Dejan_50 1286828.3 LL 
    106143 AT1G01050  ntrc LL_ntrc_Dejan_42 1819043.9 LL 
", header=T) 

prot2 <- prot1 
prot2$Accession <- "AT3G53620" 
prot <- rbind(prot1,prot2) 

plots <- list() 
pdf("TEST_boxplot.pdf", onefile=T) 
IDs<-unique(prot$Accession) 
for (i in 1:length(IDs)){ 
    temp <- prot[(prot$Accession)==IDs[i],] 
    p<- ggplot(temp, aes(factor(genotype), value, fill = Light)) + 
    geom_bar(stat="identity", position = "dodge") + 
    scale_fill_brewer(palette = "Set1")+ 
    ggtitle(as.character(i)) 
    plots[[i]] <- p 
    print(p) 
} 
dev.off() 
+0

您好,感謝您的幫助。 [鏈接](https://filebin.net/53km4lrehwoob9hu)'圖'看看數字。我不明白,爲什麼當我嘗試爲我的數據應用代碼時,會爲每個複製品繪製條形圖,而不是在您的示例中和我的示例中使用out循環。 O.o這很奇怪...我會嘗試更多,但是謝謝 – tralala

+0

@tralala第一:你現在得到一個多頁的pdf嗎?第二:你可以發佈'str(prot)'(其中'prot'是你的競爭數據集)的輸出嗎? –

+0

非常感謝!我遇到了課堂問題,發生了,謝謝你的幫助。是的,我得到的網頁和我所有的。 – tralala

相關問題