请看我的图表:
我的代码:
> head(data)
X0 X1 X2 X3 X4 X5 X6 X7 X8 X9
NM_001001144 6.52334 9.75243 5.62914 6.833650 6.789850 7.421440 8.675330 12.117600 11.551500 7.676900
NM_001001327 1.89826 3.74708 1.48213 0.590923 2.915120 4.052600 0.758997 3.653680 1.931400 2.487570
NM_001002267 1.70346 2.72858 2.10879 1.898050 3.063480 4.435810 7.499640 5.038870 11.128700 22.016500
NM_001003717 6.02279 7.46547 7.39593 7.344080 4.568470 3.347250 2.230450 3.598560 2.470390 4.184450
NM_001003920 1.06842 1.11961 1.38981 1.054000 0.833823 0.866511 0.795384 0.980946 0.731532 0.949049
NM_001003953 7.50832 7.13316 4.10741 5.327390 2.311230 1.023050 2.573220 1.883740 3.215150 2.483410
pd <- as.data.frame(scale(t(data)))
pd$Time <- sub("_.*", "", rownames(pd))
pd.m <- melt(pd)
pd.m$variable <- as.numeric(factor(pd.m$variable, levels = rev(as.character(unique(pd.m$variable))), ordered=F))
p <- ggplot(pd.m, aes(Time, variable))
p + geom_tile(aes(fill = value)) + scale_fill_gradient2(low=muted("blue"), high=muted("red")) +
scale_x_discrete(labels=c("0h", "0.25h", "0.5h","1h","2h","3h","6h","12h","24h","48h")) +
theme_bw(base_size=20) + theme(axis.text.x=element_text(angle=0, vjust=0.5, hjust=0, size=12),
axis.text.y=element_text(size=12), strip.text.y=element_text(angle=0, vjust=0.5, hjust=0.5, size=12),
strip.text.x=element_text(size=12)) + labs(y="Genes", x="Time (h)", fill="")
有没有一种方法可以聚类该图,以便该图显示时间进程中的动态。我想使用来自以下内容的集群:
hc.cols <- hclust(dist(t(data)))
发布于 2014-08-27 21:46:28
在将hclust
应用于数据之后,您可以通过定义树状图中的时间点顺序来实现这一点:
data <- scale(t(data))
ord <- hclust( dist(data, method = "euclidean"), method = "ward.D" )$order
ord
[1] 2 3 1 4 8 5 6 10 7 9
然后,您要做的唯一一件事就是将时间列转换为因子级别按ord
排序的factor
pd <- as.data.frame( data )
pd$Time <- sub("_.*", "", rownames(pd))
pd.m <- melt( pd, id.vars = "Time", variable.name = "Gene" )
pd.m$Gene <- factor( pd.m$Gene, levels = colnames(data), labels = seq_along( colnames(data) ) )
pd.m$Time <- factor( pd.m$Time, levels = rownames(data)[ord], labels = c("0h", "0.25h", "0.5h","1h","2h","3h","6h","12h","24h","48h") )
剩下的工作由ggplot
自动完成:
ggplot( pd.m, aes(Time, Gene) ) +
geom_tile(aes(fill = value)) +
scale_fill_gradient2(low=muted("blue"), high=muted("red"))
发布于 2014-08-27 21:29:09
我认为ggplot
不支持开箱即用,但您可以使用heatmap
heatmap(
as.matrix(dat), Rowv=NA,
Colv=as.dendrogram(hclust(dist(t(as.matrix(dat)))))
)
注意这看起来不像你的,因为我只是使用你的数据的head
,而不是全部。
在这里,我们使用从带有Colv
参数的hclust
派生的树状图手动指定集群。如果默认使用的集群与您想要的不一致,也可以通过Colv
参数手动指定集群。
发布于 2019-01-04 06:37:22
我想补充一下,您不需要将data.frame
中的列转换为因子,您可以使用ggplot
的scale_*_discrete
函数来设置轴的绘图顺序。只需使用limits
参数设置绘图顺序,使用labels
参数设置标签,如下所示。
data<-read.table(text="X0 X1 X2 X3 X4 X5 X6 X7 X8 X9
NM_001001144 6.52334 9.75243 5.62914 6.833650 6.789850 7.421440 8.675330 12.117600 11.551500 7.676900
NM_001001327 1.89826 3.74708 1.48213 0.590923 2.915120 4.052600 0.758997 3.653680 1.931400 2.487570
NM_001002267 1.70346 2.72858 2.10879 1.898050 3.063480 4.435810 7.499640 5.038870 11.128700 22.016500
NM_001003717 6.02279 7.46547 7.39593 7.344080 4.568470 3.347250 2.230450 3.598560 2.470390 4.184450
NM_001003920 1.06842 1.11961 1.38981 1.054000 0.833823 0.866511 0.795384 0.980946 0.731532 0.949049
NM_001003953 7.50832 7.13316 4.10741 5.327390 2.311230 1.023050 2.573220 1.883740 3.215150 2.483410", header = TRUE, stringsAsFactors = FALSE)
data <- scale(t(data))
ord <- hclust( dist(data, method = "euclidean"), method = "ward.D" )$order
pd <- as.data.frame( data )
pd$Time <- sub("_.*", "", rownames(pd))
pd.m <- melt( pd, id.vars = "Time", variable.name = "Gene" )
ggplot( pd.m, aes(Time, Gene) ) +
geom_tile(aes(fill = value)) +
scale_x_discrete(limits=pd.m$Time[ord], labels = c("0h", "0.25h", "0.5h","1h","2h","3h","6h","12h","24h","48h"))+
scale_y_discrete(limits=colnames(data), labels = seq_along(colnames(data)))+
scale_fill_gradient2(low=muted("blue"), high=muted("red"))
https://stackoverflow.com/questions/25528059
复制相似问题