bugfix> r > 投稿

ggplot2を使用してforループを使用してRで抱えている問題を誰かが解決できるかどうか疑問に思っていました。時間の経過とともに変化するデータのパターンを見つけるために、いくつかのクラスタリングを実行しました。パターンの38個のグラフで全部で様々なパターンがあります。クラスタリングの出力は、38のグラフすべてを並べて表示することで、視覚化に適しています。

しかし、個々のグラフにズームインして、プレゼンテーションとパターンのクリアなビューのためにそれらにズームインしたいと思います。これは手動で簡単に実行できますが、同じスクリプトの38バージョンを作成しますが、それぞれに異なるクラスターを使用するのは非常に退屈なので、1つのチャンクコードで実現するためにforループを作成したいと思います。私はこのコードを(オンラインでもいくらかの助けを借りて)実行しましたが、個々の38個のグラフの出力を取得できません。コード自体は、特定のクラスターの出力を提供する1つのクラスターを指定できるので機能しますが、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などに変更するか、他のクラスターは実際にその1つのクラスターを生成しますが、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

回答 1 件
  • あなたがやろうとしていることを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ループの外側で変換するため、一度適用するだけで済みます。

    各クラスターで変更するタイトルとファイル名を設定します

あなたの答え