r - 避免重新排序热图中的行和列 (r)
问题描述
我正在使用 ComplexHeatmap 绘制数据,但是,每当我开始划分矩阵以便更容易阅读时,我的行/列的顺序似乎被打乱了。
我想知道我是否没有正确指定要使用的顺序,而不是与ComplexHeatmap
使用直接相关的问题。例如,以下是否有问题:
Heatmap( as.matrix(MyData), name = "q",
column_names_rot = 0,
col = my_palette,
# ! ---> This should set the row order!!
row_order = order(rownames(as.matrix(MyData))),
# ! ---> This should set the column order!!
column_order = order(colnames(as.matrix(MyData))),
row_split = rep(c("A", "B","C", "D"), 6),
column_split = rep(c("A", "B","C", "D"), 6),
cluster_row_slices = FALSE,
cluster_column_slices =FALSE,
heatmap_legend_param = list(
title = "Legend",
col = my_palette,
at = (c(0.05,0.03,0.01,0.000001)),
legend_height = unit(6, "cm")),
)
以下论点是这个问题的关键:
# ! ---> This should set the row order!!
row_order = order(rownames(as.matrix(MyData))),
# ! ---> This should set the column order!!
column_order = order(colnames(as.matrix(MyData))),
当我创建此热图时,行和列不按顺序排列。例如
现在,当我删除row_split
andcolumn_split
命令时,我不需要设置row_order
和columns_order
排序,它看起来像这样:
从那以后,我发现当我使用row_order
并且column_order
不拆分时,它实际上仍然会打乱我的订单?
显然,我什至无法在需要时通过命令保持原始顺序。我想知道是否有人可以提供对此的见解。
这是一个可以从他们的支持文件中制作的示例矩阵(他们确实涵盖了row_order
,但我必须忽略一些东西)。您可能希望避免重新命名名称,但我对修改它感到紧张,因为我自己什至无法使用这些命令。
library(devtools)
install_github("jokergoo/ComplexHeatmap", force = TRUE)
library(ComplexHeatmap)
set.seed(123)
nr1 = 4; nr2 = 8; nr3 = 6; nr = nr1 + nr2 + nr3
nc1 = 6; nc2 = 8; nc3 = 10; nc = nc1 + nc2 + nc3
mat = cbind(rbind(matrix(rnorm(nr1*nc1, mean = 1, sd = 0.5), nr = nr1),
matrix(rnorm(nr2*nc1, mean = 0, sd = 0.5), nr = nr2),
matrix(rnorm(nr3*nc1, mean = 0, sd = 0.5), nr = nr3)),
rbind(matrix(rnorm(nr1*nc2, mean = 0, sd = 0.5), nr = nr1),
matrix(rnorm(nr2*nc2, mean = 1, sd = 0.5), nr = nr2),
matrix(rnorm(nr3*nc2, mean = 0, sd = 0.5), nr = nr3)),
rbind(matrix(rnorm(nr1*nc3, mean = 0.5, sd = 0.5), nr = nr1),
matrix(rnorm(nr2*nc3, mean = 0.5, sd = 0.5), nr = nr2),
matrix(rnorm(nr3*nc3, mean = 1, sd = 0.5), nr = nr3))
)
mat = mat[sample(nr, nr), sample(nc, nc)] # random shuffle rows and columns
rownames(mat) = paste0("row", seq_len(nr))
colnames(mat) = paste0("column", seq_len(nc))
Heatmap(mat)
以下是我一直在尝试的一些示例:
#row_order = sort(rownames(as.matrix(MyData))),
#row_order = rownames((MyData)),
#row_order = sort(rownames(MyData)),
#row_order = order((gsub("row", "", rownames(MyData)))),
#row_order = order(colnames(as.matrix(MyData))),
#column_order = order(rownames(as.matrix(MyData))),
#column_order = colnames(MyData),
#row_order = order(rownames(MyData)),
#column_order = order(as.matrix(MyData)),
#row_order = order(rownames(MyData)),
#column_order = order(colnames(MyData)),
#row_order = sort(c("C1", "C2", "C3", "C4", "C5", "C6", "C1", "C2", "C3", "C4", "C5", "C6", "C1", "C2", "C3", "C4", "C5", "C6", "C1", "C2", "C3", "C4", "C5", "C6")),
#olumn_order = sort(c("C1", "C2", "C3", "C4", "C5", "C6", "C1", "C2", "C3", "C4", "C5", "C6", "C1", "C2", "C3", "C4", "C5", "C6", "C1", "C2", "C3", "C4", "C5", "C6")),
#column_order = order(colnames(MyData)),
#column_order = sort(as.numeric(as.matrix(MyData))),
#column_order = order(colnames(MyData)),
#row_order = (MyData),
#column_order = sort(colnames(as.matrix(MyData))),
#row_order = rownames(MyData),
#row_order = sort(gsub("row", "", rownames(MyData))),
#row_order = order(colnames(as.matrix(MyData))),
#column_order = sort(colnames(as.matrix(MyData))),
#row_order = order(as.numeric(gsub("row", "", rownames(as.matrix(MyData))))),
#column_order = order(as.numeric(gsub("column", "", colnames(as.matrix(MyData))))),
#row_order = order(rownames(as.matrix(MyData))),
#column_order = order(colnames(as.matrix(MyData))),
#row_order = order(rownames(as.matrix(MyData))),
#column_order = order(colnames(as.matrix(MyData))),
解决方案
我认为问题在于您如何正确设置拆分热图的变量。
Heatmap( (MyData), name = "namehere",
column_names_rot = 0,
col = my_palette,
cluster_rows = FALSE,
cluster_columns = FALSE,
row_split = rep(1:4, each = 6),
column_split = rep(1:4, each = 6),
heatmap_legend_param = list(
title = "Legend",
col = my_palette,
at = (c(0.05,0.03,0.01,0.000001)),
legend_height = unit(6, "cm")),
border = TRUE
)
推荐阅读
- python - 将列表转换为字符串以进行标记化
- python - 如何查找重复项并在文本文件中打印该行?
- reactive-programming - 我可以使用 AtomicReference 来获取 Mono 的值并且代码仍然保持反应性吗
- java - 在 GitHub 上发布所有矩阵构建版本的单元测试结果
- angular - 失败:无法为登录测试读取未定义的属性“setValue”
- html - 在 navbar 是 position = fix 之后写的所有内容都溢出了
- json - mongoimport - 一个空对象 { } 字段值导入为空值
- wpf - 如何在 Windows 10 上的 Win32 应用程序中托管 WPF 应用程序
- c# - 用于扩展集合对象的 OData 客户端 v3 到 v4 更新方法
- javascript - 我怎样才能运行一个JavaScript函数一次