将行簇应用于新矩阵时,R ComplexHeatmap 无法重现精确的行顺序

问题描述 投票:0回答:1

我首先在 ComplexHeatmap 中使用 k 均值方法对矩阵的行进行聚类,然后将聚类应用到具有相同维度的新矩阵上,并且我预计可以在这个新矩阵上重现聚类。

例如,使用下面的脚本,

rm(list=ls())
library(ComplexHeatmap)

calc_ht_size = function(ht, unit = "inch") {
    pdf(NULL)
    ht = draw(ht)
    w = ComplexHeatmap:::width(ht)
    w = convertX(w, unit, valueOnly = TRUE)
    h = ComplexHeatmap:::height(ht)
    h = convertY(h, unit, valueOnly = TRUE)
    dev.off()

    c(w, h)
}

first_df = data.frame(
    Q=c(1.129115344, 1.137445579, 1.45156537, 1.489970374, 1.21544002, 0.530119344, 1.085955834, 1.089972828, 0.834829398, 0.605645387, 1.447775679, 0.926115233, 1.592482961, 1.156937381, 1.481807489, 1.183049669, 1.28535741, 1.218392896, 1.135012881, 1.172280755, 1.177321873, 0.798523908, 1.239229319, 1.238546303, 1.444490589, 1.534340913, 1.259657669, 1.328092342, 1.592731809, 1.377624901, 1.426522101, 1.396542689, 1.365358477, 1.528481988, 1.491304719, 1.670106114, 1.006823727, 1.208115781, 1.393435053, 1.199689886, 1.216915475, 1.071244488, 0.844316771, 1.411328825, 1.110566869, 1.389084791, 0.918785013, 1.628931477, 1.115050428, 0.996259205, 1.356692101, 0.877773982, 1.390782725, 1.17747836, 1.406321078, 1.010846696, 0.991726288, 1.109181512, 1.5988356, 0.949788561, 1.416459022, 1.314817395, 1.250099051, 0.736330298, 0.967416916, 1.066902762, 0.822859045, 1.330836189, 1.272461329, 1.444837465, 0.874300331, 1.125602852, 0.838647151, 1.227689452, 1.139579768, 1.317866035, 1.008957134, 0.841982372, 1.394688935, 1.386766547, 1.384395453, 0.446641428, 1.143915584, 0.892036278, 1.241838604, 1.173186438, 1.429751996, 1.47390146, 1.087192648, 1.390652175, 1.399477294),
    R=c(0.73229616, 1.20175958, 1.530747245, 1.277267994, 1.053576075, 1.305178825, 0.791706247, 1.05436592, 1.484339297, 0.706793336, 1.391675571, 1.124925108, 1.478221301, 1.080517319, 1.407084906, 1.195028857, 1.182488741, 1.148575398, 1.110744819, 1.124189558, 1.175406262, 0.780667877, 1.147478404, 1.198284898, 1.373605289, 1.42564634, 1.446527035, 1.409664065, 1.413089117, 1.268584473, 1.331554561, 1.446496815, 1.306742018, 1.475286366, 1.547667341, 1.57617562, 1.051924477, 1.120461007, 1.140145925, 0.828925827, 1.130013888, 1.004524688, 0.853758198, 1.372265642, 0.999519562, 1.53172148, 1.131892286, 1.175873515, 1.045661753, 1.062178935, 0.905249342, 0.992352839, 1.350366053, 1.233018075, 1.372351886, 1.167174596, 1.224814382, 1.034983132, 0.925736124, 0.902941274, 1.395213952, 1.150535261, 1.364432926, 0.759162899, 0.927825385, 1.176654164, 0.80726827, 1.303444512, 1.022246068, 1.333873342, 0.889934854, 0.991570527, 0.839239144, 1.170881208, 1.176278397, 1.318960818, 0.839494147, 0.855946803, 1.41059078, 1.421890783, 1.297247617, 0.484440923, 1.095434458, 0.862707458, 1.249992144, 1.133589753, 1.37793652, 1.39695496, 0.932344682, 1.432209161, 1.37260703),
    S=c(1.083200139, 1.291450909, 2.020171196, 1.310097623, 0, 1.630713284, 1.111491025, 1.143098559, 0, 1.080522453, 1.277929002, 2.022962392, 1.652451008, 1.301844585, 1.489698946, 1.236812631, 1.493505313, 1.336118105, 1.184954268, 1.217289869, 1.064724395, 1.094305412, 1.382968287, 1.358162074, 1.490947476, 1.590616856, 1.569678781, 0.822015614, 1.978393517, 1.551647715, 1.393150024, 1.31158954, 1.419728917, 1.523739873, 1.237479776, 1.692612683, 1.15506534, 1.618274978, 1.53238576, 1.274626596, 1.270998975, 1.341229302, 0.945175302, 1.362918575, 2.000541709, 1.258684863, 1.159549621, 1.382562928, 1.323847999, 1.148054741, 0.313895617, 1.011411734, 1.45094101, 0.831516959, 1.213803679, 0.137432688, 1.750150116, 1.242470655, 1.378867793, 1.363938677, 1.366601912, 0, 1.471651331, 1.047826432, 1.070440202, 0.554092332, 1.016962023, 1.328686166, 1.439797251, 1.19800879, 1.105150076, 1.119099096, 1.091593511, 1.306108676, 1.320250365, 1.35009176, 1.393369203, 1.188689844, 1.421803171, 1.160050524, 1.561922091, 0.992987546, 1.271617263, 1.092167174, 1.381892338, 1.377261257, 1.336368216, 1.517573854, 1.606962095, 1.303660546, 1.473858325),
    T=c(1.051705407, 1.316428901, 1.092033101, 1.455126839, 1.055136799, 2.262528729, 1.114778509, 1.228469243, 1.23060091, 1.033688801, 1.420293691, 1.179401623, 1.676364344, 1.28558844, 1.348791613, 1.495604373, 1.278555871, 1.400861312, 1.213293714, 1.251699715, 1.15284998, 1.08059781, 1.339245407, 1.274887235, 1.443820726, 1.459906236, 1.531854745, 1.486776266, 1.338984039, 1.263648847, 1.306409345, 0, 1.276752804, 1.555896164, 1.421324139, 1.441766676, 1.055094819, 1.297020747, 1.803265756, 1.30450656, 1.117430428, 0, 1.22470938, 1.470539551, 0.690114245, 1.318013757, 1.123987276, 1.371320239, 1.378088131, 1.180019284, 0.145587002, 1.137507762, 1.404039135, 0.911929872, 1.474283507, 0.620471592, 1.076271339, 1.206689862, 0, 1.073235237, 1.424012402, 2.484157761, 1.613467925, 1.039840454, 1.093596373, 0.910702008, 1.072360162, 1.341178298, 1.224182591, 1.400840444, 1.154764832, 1.082538355, 1.084664411, 1.305235955, 1.202283025, 1.362669673, 1.668033744, 1.039300443, 1.465992133, 1.662614832, 1.505834637, 0.979091409, 1.264654251, 1.054559343, 1.323830084, 1.373428012, 1.416006628, 1.512235748, 0.991007124, 1.335711109, 1.472559145),
    U=c(1.268971302, 1.242232196, 1.187120349, 1.081778214, 1.250544644, 0.79812661, 0.738719987, 1.013602178, 1.49309391, 0.631290877, 1.416117366, 0.980948149, 1.536493925, 1.225758968, 1.523524231, 1.319319131, 1.216032849, 1.241303978, 1.226874977, 1.224271075, 1.339434964, 0.731765405, 1.311509706, 1.290513563, 1.478699876, 1.498043614, 1.121848516, 1.5286011, 1.855441018, 1.243747407, 1.396777503, 1.456296071, 1.316902755, 1.491938935, 1.551533214, 1.636392743, 1.581305634, 0.577269279, 1.51161782, 0.834813004, 1.160538811, 0.824743943, 0.999557345, 1.441995106, 1.017114793, 1.245638773, 1.278718565, 0.966810735, 1.308855551, 1.051273135, 0.586020344, 0.892592365, 1.390984173, 1.018668536, 1.221538147, 1.693135312, 1.515042831, 1.033625253, 1.270261986, 0.876182122, 1.395590723, 1.369480974, 1.593081325, 0.867433809, 1.008023167, 0.663591399, 0.874368046, 1.33759177, 1.025030856, 1.419258895, 0.92647665, 1.220611725, 0.922706396, 1.279084207, 1.215156045, 1.364940462, 1.118256332, 0.987491319, 1.365983131, 1.228048292, 1.215720283, 0.423313422, 1.207013693, 0.876535789, 1.313165016, 1.275461857, 1.418979786, 1.516283635, 0.983937455, 1.514401652, 1.473889749),
    V=c(0.961600196, 1.334454474, 1.385427877, 1.187818902, 1.156919692, 1.207082878, 1.424995681, 1.243028721, 1.314933029, 0.720145841, 1.427211787, 1.088252335, 1.349180219, 1.171791842, 1.479780027, 1.265376647, 1.303161017, 1.200907261, 1.166253484, 1.185153871, 1.313314628, 0.698634287, 1.256436917, 1.176274722, 1.420162364, 1.381049044, 1.252377948, 1.459654916, 1.227836633, 1.337778662, 1.317163153, 2.001163259, 1.317340088, 1.508180587, 1.312016997, 1.537613056, 0.940665083, 1.188008285, 1.350191976, 1.171128021, 1.145602478, 0.595742729, 0.889967191, 1.370320593, 1.27436914, 1.527001912, 1.09590507, 1.128233262, 1.451247941, 1.118933003, 1.989258521, 1.028177723, 1.36921594, 1.571810758, 1.320827086, 1.228727047, 1.058616588, 1.132293999, 0.900994479, 0.885483327, 1.419306686, 0.97195865, 1.496322868, 0.935307115, 1.0975285, 1.570791215, 0.922038165, 1.326141341, 0.902366123, 1.387981185, 0.994084673, 1.121975644, 0.907474053, 1.251832261, 1.138270925, 1.388266588, 0.627304479, 0.90881131, 1.357172591, 1.337383822, 1.441132522, 0.461685287, 1.171189034, 0.827495584, 1.316767563, 1.263637559, 1.416527479, 1.483726746, 1.427864335, 1.535681549, 1.475649262),
    W=c(0.029368151, 0.951220047, 1.480936776, 0.580815172, 0, 0, 2.053684215, 0.974486229, 0, 0.661491092, 1.371956176, 0.812532606, 1.10137664, 1.180310368, 1.435770351, 1.205802433, 1.290036573, 1.429945772, 1.091226397, 1.17950076, 1.120481954, 0.669313312, 1.36255117, 1.129121966, 1.460530185, 0, 0, 1.125538602, 1.599566045, 1.456344977, 1.391435616, 1.364744625, 1.347380553, 1.545380712, 1.468038786, 1.628682945, 1.231312912, 1.16361386, 0, 1.211846059, 1.126190484, 0.910530973, 0.968354958, 1.366739471, 1.171083071, 1.417292176, 0.70353603, 0.63615595, 0.829722372, 1.042228898, 2.438553991, 0.812620861, 1.42636919, 1.838859534, 1.828820594, 2.161565272, 1.154142317, 1.113575277, 0, 0.747416951, 1.411367247, 0, 1.921427669, 0.837998926, 0.909886674, 1.497877042, 0.783396359, 1.301173762, 0.91545135, 1.415581447, 0.733132269, 1.103225932, 0.745562819, 1.292401022, 1.175321483, 1.268324743, 0.843879338, 1.122694884, 1.356294961, 1.132329872, 1.258231791, 0.293751156, 1.248665868, 0.857547333, 1.270267081, 1.366391896, 1.43065181, 1.549725224, 1.648013735, 1.600165986, 1.415048314),
    X=c(0.437720929, 1.081664334, 0.755571363, 0.957145503, 0.704399094, 0.559815378, 0.544809481, 0.954713239, 0, 0.63476636, 1.367097896, 1.42716415, 1.706831574, 1.093396308, 1.429315962, 1.279814129, 1.208130192, 1.297602049, 1.142766341, 1.14705931, 1.17031119, 0.619909708, 1.315219957, 1.211600886, 1.438224842, 1.501395904, 1.631341387, 1.196315895, 2.276167554, 1.469394449, 1.427793241, 1.181242162, 1.293174207, 1.552000344, 1.1099139, 1.497184541, 1.205288005, 1.442060615, 0, 1.085900921, 1.157237128, 0, 0.809407842, 1.413426399, 1.929116252, 1.654446901, 1.290606344, 1.367068807, 1.274451927, 1.117593966, 0.923149013, 1.094246065, 1.375510352, 1.305809838, 1.469483667, 1.108378681, 2.224156343, 0.867004529, 1.148357462, 0.701294121, 1.410238863, 0.829501103, 1.475319611, 0.702404458, 0.915004158, 0, 0.745306682, 1.308970705, 0.712594074, 1.363431476, 0.786971304, 1.135979929, 0.787902671, 1.292113865, 1.168251056, 1.325920304, 1.306879841, 0.869908991, 1.438731772, 0, 0.985359243, 0.298426271, 1.207934384, 0.868423211, 1.327653525, 1.365777231, 1.421197862, 1.534552416, 0.71735049, 1.359340978, 1.431211972),
    Y=c(0.136528262, 1.471939081, 2.097704441, 0, 0, 0, 0.005611879, 1.004848144, 0, 0.947843449, 1.437361469, 0, 1.474845622, 1.236273466, 1.466625603, 0.83118936, 1.179419436, 1.34788711, 1.11333122, 1.182510558, 1.232517782, 0.839924914, 1.396208936, 1.464569201, 1.491791781, 1.530873566, 1.426145435, 1.391548092, 0, 1.46512603, 1.343398339, 1.277800584, 1.305273655, 1.540925916, 1.04417811, 1.494302729, 1.193344794, 0, 0, 1.694002824, 1.912883527, 0, 0.48510245, 1.526236239, 0, 1.256986699, 0, 0, 1.20682169, 1.103506641, 2.011232505, 0.541624356, 1.318278786, 1.039342782, 1.518209182, 0, 1.156589384, 1.141983625, 0, 0.855929365, 1.481349146, 0, 0.960400544, 0.691571333, 0.892309626, 0, 0.882832889, 1.247257863, 0, 1.426658787, 0.739475008, 0.522780346, 0.848681841, 1.296217323, 1.017008185, 1.421609192, 0, 0.933687816, 1.373817444, 0, 0.985454745, 0.479499631, 1.230483028, 0.905383414, 1.155549329, 1.425232445, 1.447320328, 1.557005784, 0, 0.582054065, 1.434054929),
    Z=c(0.500863991, 1.090556655, 0, 0, 0, 0, 0, 0.82901053, 0, 0.680591995, 1.498345464, 0, 1.929016703, 1.149809418, 1.473389629, 1.26318767, 1.319231778, 1.148979201, 1.022333115, 1.181079262, 1.38657689, 0.841541921, 1.351362744, 1.251487361, 1.468053042, 1.621824934, 1.455681465, 1.121439307, 1.821097035, 1.348648853, 1.283558187, 0, 1.27160879, 1.609877913, 1.820996417, 1.724757763, 0.218796492, 0, 0, 0.537057829, 0.705812284, 0, 0.822672986, 1.49205633, 0, 0.555815516, 1.391787385, 0, 0.579622765, 1.118294623, 0, 0.857102437, 1.382055139, 1.682602613, 1.558735976, 1.126148103, 0, 1.634475265, 0, 0.799533018, 1.379546294, 0, 1.857180712, 0.583238364, 0.962118501, 0.895624258, 0.786862877, 1.284573341, 0, 1.456409905, 0.81289344, 0.939697607, 0.77956536, 1.273236881, 1.401016549, 1.417369293, 0, 1.173250014, 1.530355098, 0, 1.992533457, 0.453924416, 1.21442297, 0.828738859, 1.270081696, 1.429297946, 1.427777005, 1.566089887, 0.752637344, 1.67131205, 1.413759759),
    row.names = c("A-1", "B-1", "C-1", "D-1", "E-1", "F-1", "G-1", "A-2", "B-2", "C-2", "D-2", "E-2", "F-2", "G-2", "A-3", "B-3", "C-3", "D-3", "E-3", "F-3", "G-3", "A-4", "B-4", "C-4", "D-4", "E-4", "F-4", "G-4", "A-5", "B-5", "C-5", "D-5", "E-5", "F-5", "G-5", "A-6", "B-6", "C-6", "D-6", "E-6", "F-6", "G-6", "A-7", "B-7", "C-7", "D-7", "E-7", "F-7", "G-7", "A-8", "B-8", "C-8", "D-8", "E-8", "F-8", "G-8", "A-9", "B-9", "C-9", "D-9", "E-9", "F-9", "G-9", "A-10", "B-10", "C-10", "D-10", "E-10", "F-10", "G-10", "A-11", "B-11", "C-11", "D-11", "E-11", "F-11", "G-11", "A-12", "B-12", "C-12", "D-12", "E-12", "F-12", "G-12", "A-13", "B-13", "C-13", "D-13", "E-13", "F-13", "G-13")
)

first_df_name = "first_df"
random_seed = 42

set.seed(random_seed)
ht = Heatmap(first_df, name=first_df_name,
    cluster_columns = FALSE, row_km=3,
    border=TRUE, show_row_names=TRUE,
    cluster_row_slices = FALSE,
    clustering_distance_columns="pearson",
    width=ncol(first_df)*unit(5, "mm"),
    height=nrow(first_df)*unit(5, "mm"),
    row_gap=unit(2, "mm")
    )
set.seed(random_seed)
ht_draw = draw(ht)
size = calc_ht_size(ht_draw)

pdf("first_df_cluster.pdf", width=size[1], height=size[2])
set.seed(random_seed)
ht_draw = draw(ht)
dev.off()

我会得到如下的集群热图。

接下来,我从上面的簇中提取行分割和行顺序,并使用下面的脚本将其应用到第二个矩阵(借用@DaniCee的想法)。

second_df = data.frame(
    Q=c(2.507728384, 3.872303554, 3.38573237, 3.458540617, 2.33214259, 1.461693338, 3.317221176, 3.739552212, 1.893717024, 3.89611536, 4.896646655, 2.627100685, 4.050947248, 5.290093989, 4.91087596, 4.174098808, 4.21243296, 4.011057998, 4.505255576, 5.34743369, 3.876685466, 5.280070633, 5.724257111, 4.495211865, 5.115023241, 4.670826505, 2.952959919, 3.732394521, 3.25356368, 3.980351914, 4.891546203, 3.191019632, 4.859095768, 5.30204684, 3.870691453, 4.774290445, 3.139075413, 2.569247317, 2.793796459, 3.51871915, 4.032188011, 2.270000488, 4.123150988, 4.912593485, 3.265073898, 3.495479398, 3.213357011, 2.436220686, 2.920090735, 4.219090536, 2.372945888, 3.87031803, 4.845814051, 2.949895577, 3.599314847, 2.425497788, 2.884494398, 3.861257879, 1.895753917, 3.717460482, 4.804815587, 2.656762181, 3.652411513, 4.152289284, 4.587561939, 2.541928309, 4.475200895, 5.283192466, 3.272958376, 4.207382833, 5.076660591, 3.591822122, 5.214694274, 5.719504632, 4.216701233, 4.961936505, 2.854334536, 3.662344687, 4.595834239, 2.957641892, 3.55403248, 4.798308156, 5.716654498, 4.388717218, 5.043414792, 5.744660197, 5.047702671, 5.518295775, 2.757363981, 3.880766715, 5.210980704),
    R=c(2.708147938, 4.349257132, 3.50802547, 3.255408438, 2.292201411, 2.269567287, 2.754838615, 3.960264102, 2.59229544, 3.895218813, 4.874860167, 3.302060665, 3.588353756, 5.395104942, 4.945822592, 4.339014705, 4.617652253, 4.241428382, 4.598092289, 5.43894838, 3.70955235, 5.30241788, 5.726079954, 4.715788172, 5.304167567, 4.420424692, 3.21645456, 3.622399048, 3.20089389, 3.492122815, 4.642605255, 2.758126396, 4.782155934, 5.220298847, 3.684796298, 4.619730994, 3.365535584, 3.038554279, 2.384932024, 3.067568585, 4.02865978, 2.067582676, 4.026680641, 4.97078224, 2.781962826, 4.199817102, 3.948626356, 3.08014469, 3.290195949, 4.542615819, 2.242188997, 4.467946872, 5.22726879, 3.663883634, 4.233452645, 3.736698914, 3.08601686, 4.031189719, 1.258158193, 3.959756039, 4.805886878, 2.88768609, 3.837219144, 3.92370481, 4.417583923, 2.5699839, 4.431269793, 5.217829481, 3.558619547, 4.326349051, 5.114567731, 3.402585595, 5.286170299, 5.714333532, 4.526052089, 5.206695482, 2.219649732, 3.772315937, 4.57421189, 2.550585346, 3.551215998, 4.767933203, 5.693665148, 4.310252007, 5.151989375, 5.717774475, 5.129884356, 5.540563693, 2.863038975, 4.265227267, 5.319665659),
    S=c(1.083200139, 2.991434003, 3.170060826, 1.310097623, 0, 1.981165495, 1.61575367, 2.948890059, NA, 3.810807565, 3.80492192, 2.022962392, 3.317527907, 4.659037864, 4.133412751, 3.130319023, 3.491846971, 3.415246139, 3.668390197, 4.616434139, 2.698213227, 5.104699447, 5.301588746, 3.463912929, 4.470940801, 4.079919402, 2.653598351, 1.378945748, 2.513089027, 2.707248096, 3.919495518, 1.31158954, 3.823616234, 4.643719004, 2.422421144, 3.377331899, 2.506350797, 2.265392245, 1.53238576, 2.088516338, 3.202690621, 1.696379427, 2.997488072, 4.093364182, 2.000541709, 2.789778574, 2.761719882, 1.382562928, 2.024111712, 3.389355241, 0.511916166, 3.147225108, 3.863212087, 1.27962495, 2.616083399, 0.269716968, 2.45433541, 3.281188343, 1.378867793, 3.553815462, 3.973007174, NA, 2.963358704, 3.685001429, 4.055759882, 1.108184664, 3.762423723, 4.275622845, 2.263693512, 3.027738854, 4.75225292, 2.689082101, 4.85116811, 5.284281007, 3.337333938, 4.305239495, 2.414754479, 2.960773208, 3.951454238, 1.447626987, 2.189341905, 4.945436305, 5.32575032, 3.735739531, 4.287558245, 5.548991493, 4.145049965, 5.002935537, 2.773225544, 2.935013188, 4.877089124),
    T=c(2.146643324, 3.813181132, 2.021411642, 2.678948235, 2.131444203, 2.262528729, 2.53027703, 3.656545003, 2.154423889, 3.717249668, 4.087248931, 2.281642679, 3.407094144, 5.014732382, 4.032075331, 4.069708152, 4.062396721, 3.924794474, 3.856984433, 4.993918151, 3.090121525, 5.25445726, 5.442076011, 4.153564178, 4.625101064, 4.014432297, 2.794334167, 2.9410432, 2.809265955, 2.702164404, 3.716197399, NA, 3.774275858, 4.751054383, 2.765349269, 3.476791733, 2.55371255, 1.787011871, 2.577329271, 2.934259221, 3.285156168, NA, 3.87322522, 4.242035727, 1.461808208, 3.149700091, 3.723340822, 1.978919611, 2.938365031, 4.165777286, 0.145587002, 4.05144, 4.509792731, 2.247560967, 3.696169826, 0.620471592, 2.187285992, 3.395171746, NA, 3.511939704, 4.199939228, 2.484157761, 3.626426068, 3.2274992, 3.926055151, 1.388683368, 3.918717639, 4.560778396, 3.427244529, 3.64546143, 4.914188106, 2.749450046, 5.020863882, 5.376101153, 3.887863033, 4.751724367, 2.265335266, 3.05339272, 3.553466691, 1.970864863, 2.551492956, 5.044251323, 5.421828427, 3.893414265, 4.6609696, 5.611078729, 4.448054457, 5.185375519, 2.019484429, 3.582988835, 5.189071339),
    U=c(1.935550356, 3.807131915, 2.233584718, 1.694537417, 2.339398665, 1.665485698, 1.882037944, 3.135973857, 2.512319175, 3.482460981, 4.529863893, 2.052505402, 3.153685021, 4.90913054, 4.645367587, 3.785696334, 3.446077572, 3.552089732, 4.104520736, 5.040935672, 3.595809338, 4.895506336, 5.554920807, 4.215085714, 4.801526667, 4.26240731, 2.537787191, 2.976287077, 3.017924865, 3.010269437, 4.389523613, 2.661144293, 4.418030308, 5.006390913, 3.422605602, 4.18032957, 3.683649859, 1.11946782, 2.037265889, 1.877248848, 3.786773927, 2.175283903, 3.586849219, 4.578259558, 2.393292857, 3.039304466, 2.884999604, 0.966810735, 2.796463503, 3.613145526, 0.917176513, 3.40054465, 4.541831745, 1.992360912, 3.041091665, 2.033548999, 3.346607261, 3.688574214, 1.664999196, 3.426885333, 4.474703471, 2.340658177, 3.161028929, 3.360764307, 4.036406167, 1.803837684, 4.299936878, 4.918580342, 2.798918771, 4.056895869, 4.698966013, 3.342636387, 4.950100881, 5.550175378, 3.825387236, 4.727524036, 2.510895611, 3.444984767, 4.197901166, 2.23711379, 2.403513935, 4.419278301, 5.587480094, 3.92830194, 4.761702683, 5.678906302, 4.773807616, 5.289935301, 2.066459522, 3.660914243, 4.821089781),
    V=c(2.729713617, 4.064868511, 2.866998453, 2.414668161, 2.149483918, 1.798681328, 2.979521782, 3.800588855, 1.862732562, 3.681324926, 4.631580124, 2.61260929, 3.046881708, 5.119994432, 4.555420817, 4.008414259, 4.413913089, 4.055806627, 4.390045546, 5.199869091, 3.897786077, 4.939900534, 5.649538908, 4.368875029, 5.014855153, 3.986081439, 2.742791799, 3.524531392, 2.632735613, 3.243919718, 4.317783068, 2.929250306, 4.411582665, 5.022317947, 3.442916166, 4.020237571, 2.760685453, 2.764398625, 1.64727112, 2.756782731, 3.737933279, 1.191485458, 3.7588313, 4.617429832, 2.599525657, 3.624122646, 3.479478367, 2.314300171, 3.699469849, 4.206280571, 1.989258521, 4.213188633, 4.884021513, 3.07167, 3.73622296, 1.785250872, 2.111814154, 3.636969334, 1.603445161, 3.501640915, 4.413141012, 2.34239723, 3.731864551, 3.292032482, 4.272424919, 3.296335541, 4.398455086, 4.891088389, 2.549323277, 3.903341663, 4.874494014, 3.368031438, 5.062722159, 5.603838036, 4.160076427, 4.980508512, 1.64223847, 3.386931613, 4.111719823, 2.475073106, 3.649977692, 4.471232527, 5.635786302, 3.86727016, 4.950204263, 5.687996533, 4.767175551, 5.380269005, 3.028554885, 4.002850129, 5.034693477),
    W=c(0.029368151, 2.935531273, 2.268001815, 1.258687209, NA, NA, 2.970252801, 3.157758433, NA, 3.089105226, 4.165568988, 1.425063088, 2.736905014, 4.681512147, 4.236020537, 3.317291625, 3.323240757, 3.563046684, 3.68836178, 4.75384274, 3.156675765, 4.565106503, 5.385100074, 3.442387032, 4.583713325, NA, NA, 2.33565725, 2.207875431, 3.136367946, 4.254558049, 1.964471569, 4.261440732, 4.896475259, 3.444436826, 4.247770738, 3.420001553, 1.451012695, NA, 2.487534739, 2.992954279, 1.821061945, 3.015031573, 4.08656789, 2.305884297, 2.486997886, 1.966893074, 1.272311899, 1.771339462, 3.667475724, 2.438553991, 2.8828266, 4.209143961, 2.204673214, 3.107701729, 2.161565272, 1.989834912, 2.617157089, NA, 2.718828712, 3.966502695, NA, 3.08116934, 3.180439843, 3.786411681, 2.094172198, 3.624577868, 4.609829058, 2.098157752, 3.604603778, 4.279050201, 2.653233781, 4.492968992, 5.321796681, 3.386401631, 4.413967389, 1.626272389, 2.941312093, 3.929595597, 1.132329872, 2.260423037, 4.009826829, 5.397514675, 3.332822119, 4.42189828, 5.518260592, 4.4635226, 5.102027838, 1.648013735, 3.04610177, 4.597210138),
    X=c(1.421666352, 3.237688284, 1.888489019, 1.953906723, 1.709298287, 0.808562251, 0.797616741, 2.687562843, NA, 2.931787611, 4.052693784, 2.357088512, 2.97208345, 4.916272313, 4.389351989, 3.549261391, 3.922099324, 3.6253991, 3.822839917, 4.887984553, 2.841859013, 4.573334105, 5.445751714, 3.910693005, 4.65511509, 3.878443087, 2.558017499, 2.738194594, 2.276167554, 2.56491878, 4.057676987, 1.915028376, 4.013482186, 4.820787884, 2.376730417, 3.779918665, 2.021390961, 2.397322395, NA, 1.946704412, 3.060588159, NA, 2.94934158, 4.201257395, 2.320718992, 2.771681109, 2.957289461, 1.781144269, 2.834136019, 3.700078103, 0.923149013, 3.622533346, 4.586863859, 3.35687457, 3.285210447, 1.592931668, 2.714123982, 2.657979874, 1.148357462, 3.326597931, 4.06982902, 1.146245869, 2.748319777, 2.728445744, 3.635283551, NA, 3.672343272, 4.563869989, 2.013629168, 3.446198769, 4.438092704, 2.577249507, 4.554424415, 5.346934516, 3.705762942, 4.522498212, 1.968987588, 2.745779895, 3.578609566, NA, 1.466064092, 3.946180581, 5.398763907, 3.511826661, 4.591742367, 5.530337365, 4.421999249, 5.143495788, 1.408776064, 3.234919545, 4.761779172),
    Y=c(0.136528262, 2.569572726, 2.097704441, NA, NA, NA, 0.011223758, 1.925562347, NA, 2.602337651, 3.766646296, NA, 1.770256948, 4.593784411, 4.09183535, 2.515420722, 2.73307276, 2.789814175, 3.527595527, 4.4806611, 2.88549518, 4.367798547, 4.991625903, 3.433124824, 4.302240528, 3.683925673, 2.337748328, 3.18047725, NA, 3.330696906, 3.970804078, 1.654926698, 3.757872199, 4.584188849, 2.136292267, 3.806216922, 1.193344794, NA, NA, 2.016072193, 1.912883527, NA, 1.802660137, 3.988281514, NA, 2.513973398, NA, NA, 1.518458439, 2.360571085, 2.011232505, 1.781862223, 3.678367168, 1.039342782, 1.518209182, NA, 1.156589384, 2.250137641, NA, 2.213397551, 3.524413949, NA, 2.312833123, 2.86919608, 3.396065136, NA, 3.320207515, 4.190757374, NA, 2.845428208, 3.858651668, 1.599220311, 4.132113972, 4.881039751, 2.364248221, 4.000800627, NA, 2.464190594, 3.773781375, NA, 1.406233332, 3.873605834, 4.807078758, 2.668320851, 3.703634971, 5.2052446, 3.758605159, 4.71670939, NA, 1.123141037, 4.190815169),
    Z=c(0.500863991, 2.625941358, NA, NA, NA, NA, NA, 2.196448613, NA, 2.546054101, 3.640356908, NA, 1.929016703, 4.74059778, 4.182718626, 3.038809279, 3.434895476, 2.84086801, 3.459059478, 4.561111512, 2.762060512, 4.306956639, 4.986303881, 3.300797841, 4.415320502, 3.168324333, 1.455681465, 2.041768596, 1.821097035, 2.455175172, 3.395036029, NA, 3.33854437, 4.490447385, 1.820996417, 3.600341884, 0.437592984, NA, NA, 1.597514247, 1.231408482, NA, 2.255253182, 3.879439941, NA, 0.555815516, 1.391787385, NA, 2.186012007, 2.699052585, NA, 2.471207059, 4.100168371, 1.988504939, 2.634695273, 1.126148103, NA, 2.706303125, NA, 2.139151982, 3.442954861, NA, 2.389593101, 3.160205399, 3.20650254, 0.895624258, 3.224111526, 4.054615231, NA, 3.438317675, 3.932163744, 2.207316671, 4.048130664, 4.843932315, 3.470499736, 3.961910229, NA, 2.036715789, 3.498486844, NA, 1.992533457, 3.769789096, 4.862154344, 2.865489594, 3.678567087, 5.190365078, 3.826157585, 4.784648939, 0.752637344, 3.000187186, 4.342923696),
    row.names = c("A-1", "B-1", "C-1", "D-1", "E-1", "F-1", "G-1", "A-2", "B-2", "C-2", "D-2", "E-2", "F-2", "G-2", "A-3", "B-3", "C-3", "D-3", "E-3", "F-3", "G-3", "A-4", "B-4", "C-4", "D-4", "E-4", "F-4", "G-4", "A-5", "B-5", "C-5", "D-5", "E-5", "F-5", "G-5", "A-6", "B-6", "C-6", "D-6", "E-6", "F-6", "G-6", "A-7", "B-7", "C-7", "D-7", "E-7", "F-7", "G-7", "A-8", "B-8", "C-8", "D-8", "E-8", "F-8", "G-8", "A-9", "B-9", "C-9", "D-9", "E-9", "F-9", "G-9", "A-10", "B-10", "C-10", "D-10", "E-10", "F-10", "G-10", "A-11", "B-11", "C-11", "D-11", "E-11", "F-11", "G-11", "A-12", "B-12", "C-12", "D-12", "E-12", "F-12", "G-12", "A-13", "B-13", "C-13", "D-13", "E-13", "F-13", "G-13")
)

second_df_name = "second_df"

row_order_idx = ht_draw@ht_list[[first_df_name]]@row_order
row_split_df = ht_draw@ht_list[[first_df_name]]@matrix_param$row_split
row_split_df[, "row_order"] = rownames(first_df)
row_split_df = row_split_df[row_order_idx, ]
rownames(row_split_df) <- NULL
colnames(row_split_df) = c("label", "row_order")

set.seed(random_seed)
total_ht = Heatmap(second_df, name=second_df_name,
    cluster_columns = FALSE, cluster_rows = FALSE,
    row_order=row_split_df$row_order,
    row_split=factor(row_split_df$label, levels=unique(row_split_df$label)),
    border=TRUE, show_row_names=TRUE,
    clustering_distance_columns="pearson",
    width=ncol(second_df)*unit(5, "mm"),
    height=nrow(second_df)*unit(5, "mm"),
    row_gap=unit(2, "mm")
    )
set.seed(random_seed)
total_ht_draw = draw(total_ht)
total_size = calc_ht_size(total_ht_draw)

pdf("second_df_cluster.pdf", width=total_size[1], height=total_size[2])
set.seed(random_seed)
total_ht_draw = draw(total_ht)
dev.off()

但是第二个集群热图无法像第一个集群热图那样重现行顺序。

有人对这个问题有任何想法吗?提前非常感谢您。

r cluster-analysis complexheatmap
1个回答
0
投票

抱歉我才看到这个。如果我理解正确的话,您只想将从聚类

matrix_1
中获得的相同顺序和“切片”应用到具有相同行和列名称的不同
matrix_2
(而不对此应用任何聚类)。

确实和我遇到的问题类似;您在这里犯的主要错误是您将

row_order_idx
应用于您的
row_split_df
(您的“元信息”数据框)。

您的“元信息”数据框具有将行/列分组到的组,在本例中为“切片”。

“元信息”数据框必须具有与矩阵完全相同的 ID 顺序。

这就是为什么我喜欢将我的“元信息”数据框明确命名为“meta_df”(如果我有行和列的组,则为“meta_cols”和“meta_rows”),所以我知道我不能弄乱这些数据框(与矩阵相同)。

我只是使用

iris
数据来实现更好的可读性,并且效果很好。见下图:

#first matrix
data(iris)
setosa=subset(iris, Species=="setosa")
versicolor=subset(iris, Species=="versicolor")
virginica=subset(iris, Species=="virginica")
set.seed(42)
rows_used1 <- sort(sample(1:nrow(setosa), 10, replace = F))
rows_used2 <- sort(sample(1:nrow(versicolor), 10, replace = F))
rows_used3 <- sort(sample(1:nrow(virginica), 10, replace = F))
iris_sub=rbind(my_setosa[rows_used1,], my_versicolor[rows_used2,], my_virginica[rows_used3,])
#
matrix_1=as.matrix(iris_sub[,-ncol(iris_sub)])
rownames(matrix_1)=paste0("id",rownames(iris_sub))
#
palette=grDevices::colorRampPalette(c("green","black","red"))(11)
complex_heat1 <- ComplexHeatmap::Heatmap(matrix_1, cluster_rows = TRUE, cluster_columns = FALSE,
                                         row_km = 3, col = palette, clustering_distance_rows = "pearson",
                                         border = TRUE, cluster_row_slices = FALSE, name = "matrix_1")
grDevices::png(filename="heatmap1.png", height=800, width=400)
ch1_draw=ComplexHeatmap::draw(complex_heat1)
grDevices::dev.off()
#
#
#second matrix with same rownames
rows_used=sample(1:nrow(iris), nrow(matrix_1), replace = F)
iris_sub2=iris[rows_used,]
matrix_2=as.matrix(iris_sub2[,-ncol(iris_sub2)])
rownames(matrix_2)=rownames(matrix_1)
#
row_order_idx=ch1_draw@ht_list[["matrix_1"]]@row_order
row_order=rownames(matrix_2)[row_order_idx]
row_split_df=ch1_draw@ht_list[["matrix_1"]]@matrix_param$row_split
#create meta_df, with IDs in the exact same order as in matrix_1 and 2 (do not use row_order_idx here)
meta_df=data.frame(ID=rownames(matrix_1), Slice=row_split_df[,1])
#define row_split; you can specify the levels here if you want slices in an order different from 1, 2, 3
row_split=factor(as.character(meta_df$Slice), levels=c(1,2,3))
#
complex_heat2 <- ComplexHeatmap::Heatmap(matrix_2, cluster_rows = FALSE, cluster_columns = FALSE,
                                         col = palette, border = TRUE, name = "matrix_2",
                                         row_order = row_order, row_split = row_split)
grDevices::png(filename="heatmap2.png", height=800, width=400)
ch2_draw=ComplexHeatmap::draw(complex_heat2)
grDevices::dev.off()

这是第一个矩阵的热图,具有聚类和“切片定义”:

这是第二个矩阵的热图,没有聚类和应用第一个矩阵获得的顺序和切片:

© www.soinside.com 2019 - 2024. All rights reserved.