0
儘管我發現了相當類似的問題,但我仍然努力使用ggplot2,但我並沒有設法實現它。我想按列重新排序,並按照分層聚類排列熱圖。ggplot2基於分層聚類重新編制熱圖
這裏我實際的代碼:
# import
library("ggplot2")
library("scales")
library("reshape2")
# data loading
data_frame = read.csv(file=input_file, header=TRUE, row.names=1, sep='\t')
# clustering with hclust on row and on column
dd.col <- as.dendrogram(hclust(dist(data_frame)))
dd.row <- as.dendrogram(hclust(dist(t(data_frame))))
# ordering based on clustering
col.ord <- order.dendrogram(dd.col)
row.ord <- order.dendrogram(dd.row)
# making a new data frame reordered
new_df = as.data.frame(data_frame[col.ord, row.ord])
print(new_df) # when mannualy looking new_df it seems working
# get the row name
name = as.factor(row.names(new_df))
# reshape
melte_df = melt(cbind(name, new_df))
# the solution is here to reorder the name column factors levels.
melte_df$name = factor(melte_df$name, levels = row.names(data_frame)[as.vector(row.ord)])
# ggplot2 dark magic
(p <- ggplot(melte_df, aes(variable, name)) + geom_tile(aes(fill = value),
colour = "white") + scale_fill_gradient(low = "white",
high = "steelblue") + theme(text=element_text(size=12),
axis.text.y=element_text(size=3)))
# save fig
ggsave(file = "test.pdf")
# result is ordered as only by column what I have missed?
我有R相當牛逼,如果你可以開發你的答案,你會受到歡迎。
你的答案真正有用的地方指出問題。但最終我找到了一個更方便的方法。通過重新排列因素水平。我將編輯我的問題,添加使其工作的原因,但再次感謝您的幫助。 –