-1

データセット全体がモジュール (または必要に応じてクラスター) を記述します。

例を再現するために、データセットは https://www.dropbox.com/s/y1905suwnlib510/example_dataset.txt?dl=0で入手できます。

(54kbファイル)

次のように読むことができます。

test_example <- read.table(file='example_dataset.txt')

私のプロットに入れたいのはこれです

プロットでは、x 軸は Timepoints 列で、y 軸は最後の 3 列を除くデータセットの列です。次に、facet_wrap() を使用して、ConditionID 列でグループ化しました。

これはまさに私が望むものですが、これを達成する方法は次のコードでした:

plot <- ggplot(dataset, aes(x=Timepoints))
plot <- plot + geom_line(aes(y=dataset[,1],colour = dataset$InModule))
plot <- plot + geom_line(aes(y=dataset[,2],colour = dataset$InModule))
plot <- plot + geom_line(aes(y=dataset[,3],colour = dataset$InModule))
plot <- plot + geom_line(aes(y=dataset[,4],colour = dataset$InModule))
plot <- plot + geom_line(aes(y=dataset[,5],colour = dataset$InModule))
plot <- plot + geom_line(aes(y=dataset[,6],colour = dataset$InModule))
plot <- plot + geom_line(aes(y=dataset[,7],colour = dataset$InModule))
plot <- plot + geom_line(aes(y=dataset[,8],colour = dataset$InModule))
...

ご覧のとおり、あまり自動化されていません。次のようにループを入れることを考えました

columns <- dim(dataset)[2] - 3
for (i in seq(1:columns))
{
  plot <- plot + geom_line(aes(y=dataset[,i],colour = dataset$InModule))
}
(plot <- plot + facet_wrap(  ~ ConditionID, ncol=6) )

それはうまくいきません。私の問題に対応するトピック Use for loop to plot multiple lines in single plot with ggplot2を見つけました。Melt() 関数で与えられた解決策を試しました。

問題は、データセットでメルトを使用すると、x 軸としてプロットする Timepoints 列の情報が失われることです。これが私がした方法です:

data_melted <- dataset
as.character(data_melted$Timepoints)
dataset_melted <- melt(data_melted)

集計を使ってみた

aggdata <-aggregate(dataset, by=list(dataset$ConditionID), FUN=length)

少なくとも、aggdata を使用すると、ConditionID ごとに Timepoints の数に関する情報が得られますが、ここから先に進み、ggplot でこれを組み合わせる方法がわかりません。

誰でも私にアプローチを提案できますか?rbindを使用してループで新しいデータセットを作成するという醜いソリューションを使用できることは知っていますが(そのリンクにも記載されています)、非常に非効率的に聞こえるので、そうしたくありません。正しい方法で学びたい。

ありがとう

4

1 に答える 1

3

必要なすべての情報を保持するid.varsには、呼び出しで指定する必要があります。melt.data.frameあなたへの呼び出しではggplot、前と同じ結果を得るために正しいグループ化変数を指定する必要があります。考えられる解決策は次のとおりです。

melted <- melt(dataset, id.vars=c("Timepoints", "InModule", "ConditionID"))
p <- ggplot(melted, aes(Timepoints, value, color = InModule)) +
  geom_line(aes(group=paste0(variable, InModule)))
p
于 2014-11-19T15:59:01.210 に答える