整个数据集描述了一个模块(或者你喜欢的集群)。
为了重现该示例,数据集可在以下位置获得: https://www.dropbox.com/s/y1905suwnlib510/example_dataset.txt?dl=0
(54kb档案)
您可以阅读:
test_example <- read.table(file='example_dataset.txt')
我希望在我的情节中有this
在图上,x轴是我的时间点列,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轴。这就是我的方式:
data_melted <- dataset
as.character(data_melted$Timepoints)
dataset_melted <- melt(data_melted)
我尝试使用聚合
aggdata <-aggregate(dataset, by=list(dataset$ConditionID), FUN=length)
现在至少使用aggdata我有关于每个ConditionID有多少个时间点的信息,但我不知道如何从这里开始并将其结合在ggplot上。
任何人都可以建议我一个方法。 我知道我可以使用在rbind循环中创建新数据集的丑陋解决方案(也在该链接中给出),但我不想这样做,因为它听起来效率很低。我想学习正确的方法。
由于
答案 0 :(得分:1)
您必须在致电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