簡體   English   中英

使用R中的for循環為每個因子打印多個ggplots

[英]Print multiple ggplots for each factor using a for loop in R

我對R很新,這是我在Stackoverflow上的第一個問題所以如果有什么不清楚的話請告訴我!
我有一個大型數據集,它由因子變量df $ site分割。 對於每個站點,我需要打印幾個圖(比如A和B)。 到目前為止,我已經設法將所有圖表單獨打印為單獨的PDF文件(使用下面的代碼)。
但是,我需要將圖表分組為一個大的PDF - 每個頁面包含每個站點的繪圖A和繪圖B,例如
第1頁 - 第1站 - 圖A1,圖B1
第2頁 - 站點2 - 繪制A2,繪制B2(依此類推)。
我非常感謝有關如何做到這一點的一些建議!

doplot = invisible(by(df, df$site, function(i) {

A <- ggplot(i, aes(x, y1))+ geom_point() + ggtitle(unique(i$site))  
B <- ggplot(i, aes(x, y2))+ geom_point() + ggtitle(unique(i$site))

ggsave(sprintf("%s_A.pdf", unique(i$site)), A)
ggsave(sprintf("%s_B.pdf", unique(i$site)), B)
}))

lapply(unique(df$site), doplot)

我不確定如何發布樣本數據,所以這里有一個簡化的示例:

site    x   y1  y2
site_1  3.56    0.337674318 1.935941597
site_1  4.31    1.559665628 2.402924583
site_1  4.36    1.523297984 2.600534832
site_1  5.03    2.261701756 2.394485714
site_1  5.23    2.573428703 2.686396123
site_1  5.33    2.582030907 2.600534832
site_1  5.69    2.842581635 2.723667517
site_2  3.79    2.793543915 3.265708161
site_2  4.49    3.353407259 3.701443333
site_2  4.88    3.363259555 3.733048672
site_2  4.94    3.550471097 3.780780075
site_2  4.88    3.590317006 3.848359519
site_2  5.31    3.708100041 3.922750337
site_2  5.26    3.735499016 3.906067837
site_2  4.22    3.074269438 4.091499816
site_2  6.72    4.329273722 4.35481919
site_2  6.46    4.283464186 4.326989203

在這里上傳了一個示例.csv文件。 謝謝!

您可以使用ggplot2 facetting將所有繪圖放在同一頁面上:

ggplot(df, aes(x=x, y=y1)) +
  geom_point() + 
  facet_grid(. ~ site)

@Luise,使用你的'sample.csv'文件,這將為你提供所要求的文件,每頁2個圖,按“網站”分組。 (確保變量'site'是一個因素。你應該用'str(df)'來檢查它)。 我使用'grid.Extra'包中的'grid.arrange'函數來放置圖。 如果pdf函數中沒有name參數,則繪圖將打印到默認的“Rplots.pdf”文件中。

require(ggplot2)
require(gridExtra)
pdf(onefile = TRUE)
for(i in 1:length(levels(df$site))){
  A <- ggplot(df[df$site == levels(df$site)[i],], aes(x=x, y=y1)) + geom_point() + ggtitle(levels(df$site)[i])
  B <- ggplot(df[df$site == levels(df$site)[i],], aes(x=x, y=y2)) + geom_point() + ggtitle(levels(df$site)[i])
  grid.arrange(A, B)
}
dev.off()

您可以在此處下載輸出文件。

暫無
暫無

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

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