簡體   English   中英

在ggplot2中使用for循環在數據框中繪制多個圖形

[英]Using a for loop with ggplot2 to plot multiple graphs within a data frame

我只是想知道是否有人可以通過使用ggplot2的for循環來解決我在R中遇到的問題。 我進行了一些聚類,以查找隨時間變化的數據模式。 共有38種模式圖的各種模式。 聚類的輸出是將所有38個圖形並排放置,這對於可視化非常有用。

但是我想放大單個圖形以放大它們以進行展示和清晰的圖案視圖。 手動操作很容易,但是,編寫38個版本的相同腳本,但每個腳本中只有一個不同的集群非常繁瑣,因此我想創建一個for循環,以實現一個快速代碼塊。 我已經完成了這段代碼(也在線獲得了一些幫助),但是,我無法獲得單個38張圖表的輸出。 代碼本身可以工作,因為我可以指定一個集群,然后再給我該特定集群的輸出,但是我想創建一個可以創建所有38個不同集群的代碼。

我使用的代碼如下:

數據幀稱為dfllgc,其中dfllgc $ cluster包含有關各個群集的信息。 我正在嘗試的for循環如下,但不起作用。 任何幫助將不勝感激!

    for(cluster in dfllgc$cluster){
  df<-subset(dataframAMIRllgc,cluster == 1:38)
  df$Time_point<-factor(df.s$Time_point, levels = c("p3", "p15", "p30","p60"))
  g<-ggplot(df, aes(x=Time_point, y=abundance, group=llgc, colour=llgc))+
  geom_line(size=1.5)+
  geom_point(size=4)+
  ggtitle("Cluster 29: Patterns over time (5 genes) \n") +
  xlab("\nAge") + ylab("Expression(CPM)\n")
  print(g) }

將df <-subset(dataframAMIRllgc,cluster == 1:38)更改為== 1或15等,或者其他任何集群的確會生成該集群,但並非所有38集群都具有1:38。

最后,有了標題(ggtitle),是否有一種方法也可以使標題自動化,以便我可以有一個模板,但是聚類號和基因數會自動應用於正確的聚類?

非常感謝! 任何幫助將非常感激 :)

示例數據

    merge   cluster Time_point  llgc    abundance
1   High[26-50%]p15 1   p15 High[26-50%]    166.5400335
38  High[26-50%]p3  1   p3  High[26-50%]    255.5007952
75  High[26-50%]p30 1   p30 High[26-50%]    122.1110473
112 High[26-50%]p60 1   p60 High[26-50%]    78.84340532
149 Low[0-10%]p15   1   p15 Low[0-10%]  86.40962037
186 Low[0-10%]p3    1   p3  Low[0-10%]  205.9750297
223 Low[0-10%]p30   1   p30 Low[0-10%]  60.23843127
260 Low[0-10%]p60   1   p60 Low[0-10%]  56.64259547
297 Medium[11-25%]p15   1   p15 Medium[11-25%]  165.2372227
334 Medium[11-25%]p3    1   p3  Medium[11-25%]  223.3891249
371 Medium[11-25%]p30   1   p30 Medium[11-25%]  155.1325448
408 Medium[11-25%]p60   1   p60 Medium[11-25%]  176.8285175
2   High[26-50%]p15 2   p15 High[26-50%]    85.21789981
39  High[26-50%]p3  2   p3  High[26-50%]    211.5359752
76  High[26-50%]p30 2   p30 High[26-50%]    35.7475454
113 High[26-50%]p60 2   p60 High[26-50%]    12.87995477
150 Low[0-10%]p15   2   p15 Low[0-10%]  77.20608808
187 Low[0-10%]p3    2   p3  Low[0-10%]  43.04550979
224 Low[0-10%]p30   2   p30 Low[0-10%]  34.88976766
261 Low[0-10%]p60   2   p60 Low[0-10%]  9.791146582
298 Medium[11-25%]p15   2   p15 Medium[11-25%]  46.21377697
335 Medium[11-25%]p3    2   p3  Medium[11-25%]  34.89603178
372 Medium[11-25%]p30   2   p30 Medium[11-25%]  14.18668175
409 Medium[11-25%]p60   2   p60 Medium[11-25%]  7.360330065
3   High[26-50%]p15 3   p15 High[26-50%]    47.75793997
40  High[26-50%]p3  3   p3  High[26-50%]    62.3529071
77  High[26-50%]p30 3   p30 High[26-50%]    17.8348889
114 High[26-50%]p60 3   p60 High[26-50%]    14.26366778
151 Low[0-10%]p15   3   p15 Low[0-10%]  138.1451371
188 Low[0-10%]p3    3   p3  Low[0-10%]  185.1184602
225 Low[0-10%]p30   3   p30 Low[0-10%]  63.52332626
262 Low[0-10%]p60   3   p60 Low[0-10%]  39.40566363
299 Medium[11-25%]p15   3   p15 Medium[11-25%]  26.32551336
336 Medium[11-25%]p3    3   p3  Medium[11-25%]  49.72067928
373 Medium[11-25%]p30   3   p30 Medium[11-25%]  8.288553629
410 Medium[11-25%]p60   3   p60 Medium[11-25%]  5.385031193

我不確定我100%理解您要做什么,但是我認為您的子集有問題,然后您需要在最后添加保存功能。 希望這可以滿足您的要求:

dfllgc$Time_point<-factor(dfllgc$Time_point, levels = c("p3", "p15", "p30","p60"))

for(cluster in unique(dfllgc$cluster)) {

    g<-ggplot( dfllgc[ dfllgc$cluster == cluster, ], 
              aes(x=Time_point, y=abundance, group=llgc, colour=llgc)) +
        geom_line(size=1.5) +
        geom_point(size=4) +
        ggtitle( paste0("Cluster ", cluster,": Patterns over time (5 genes)") ) +
        xlab("Age") + ylab("Expression(CPM)")

    ggsave(paste0("Cluster_", cluster,".png"), g) 

}

所做的更改:

  • 刪除了子集行,並將集群子集/過濾器添加到了ggplot行,但它也可以很容易地分離。
  • factor轉換移到了for循環之外,因此只需要應用一次。
  • 設置標題和文件名以隨每個群集更改

暫無
暫無

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

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