2016-10-20 7 views
3

У меня есть этот тепловой план, который я сгенерировал с помощью ggplot2.Белое пространство между плитами в heatplot ggplot

enter image description here Что бы я хотел сделать, это добавить пробел между переменными, указанными заглавными буквами, и переменными, перечисленными в нижнем регистре, чтобы отделить эти две категории. Я все еще хочу, чтобы плитки были одинаковой ширины.

Код я использовал для создания участка является:

ggplot(mockdata, aes(variable, Measurement)) + 
    geom_tile(aes(fill = mockdata$plotval), colour = "dark red") + scale_fill_gradient2(limits=c(-20, 20),high = "firebrick3", low = "dodgerblue4") + 
    theme_minimal() + theme(axis.text.x=element_text(size=28, angle=90), axis.text.y=element_text(size=28)) + 
    labs(title="", x="", y="", fill="") 

И мои данные выглядит следующим образом:

> head(mockdata) Measurement variable   Pval  effect 
> direction plotval category 21   20  A 4.511987e+04 
> -0.004892941  -1 -4.6543678 Measured 22   19  A 3.436853e-08 0.054344854   1 7.4638390 Measured 23   18  A 1.465755e+00 0.355139910   1 -0.1660613 Measured 24   
> 17  A 7.006222e-04 -0.079390247  -1 3.1545161 Measured 25 
> 16  A 4.705051e-04 -0.017708611  -1 3.3274357 Measured 26 
> 15  A 2.301113e+03 -0.022934623  -1 -3.3619379 Measured 

PS. Хотя это еще один вопрос, я также хотел бы отредактировать легенду так, чтобы она находилась в диапазоне от 0 до 20 и разделялась двумя вертикально, показывая с одной стороны красный градиент и синий градиент - с другой.

Большое спасибо за помощь.

Edit: выход dput по запросу

dput(mockdata) 
structure(list(Measurement = structure(c(20L, 19L, 18L, 17L, 
16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 
2L, 1L, 20L, 19L, 18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 
9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 20L, 19L, 18L, 17L, 16L, 
15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 
1L, 20L, 19L, 18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 
8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 20L, 19L, 18L, 17L, 16L, 15L, 
14L, 13L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 
20L, 19L, 18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 
7L, 6L, 5L, 4L, 3L, 2L, 1L, 20L, 19L, 18L, 17L, 16L, 15L, 14L, 
13L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 20L, 
19L, 18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 7L, 
6L, 5L, 4L, 3L, 2L, 1L, 20L, 19L, 18L, 17L, 16L, 15L, 14L, 13L, 
12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L), .Label = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", 
"25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", 
"36", "37", "38", "39", "40"), class = "factor"), variable = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 
9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 
9L, 9L, 9L), .Label = c("A", "B", "C", "a", "b", "c", "d", "e", 
"f"), class = "factor"), Pval = c(45119.8699435164, 3.43685309800565e-08, 
1.46575455003134, 0.000700622204341352, 0.000470505115493356, 
2301.1126328306, 4.54797845872279e-09, 2.82713540460051, 7.27455376527109, 
0.000708124149686762, 2.42898037459018, 129.848099736546, 0.199979430821282, 
3.14108095159057, 1.27073870790998, 107.060952494286, 5853.27997745224, 
0.0742582348172777, 0.179994821770633, 896.77644657471, 23.2401456908433, 
1.04257158400361e-05, 0.818717078694074, 0.000516863241751892, 
0.445544049614064, 37.9699212955842, 4.87750761132064, 0.138732186303325, 
0.0185924820003653, 30.8203248121754, 2.40190754411345, 61.2579350060232, 
6.44618209352764, 1047821.38958175, 704454.528072486, 1184.40676026588, 
9.27799786552194, 244051.746539605, 375048.779613815, 9134.54101073437, 
3.11905288061898e-08, 2.00150860109179e-05, 7.0931638758186e-05, 
2.43242155771004, 1602.73424833609, 6.02923321145412, 3.21794638623681, 
39545.9388361236, 475.781444413131, 455.686197237482, 4.67829129583755, 
909.58298359142, 2.02989433872695e-12, 0.000760836775114312, 
0.000112864936813818, 0.00189775331609849, 0.0815921243521161, 
31.0427655620544, 64.1785732227039, 0.00217933417639979, 0.32663419999951, 
2.54891270451988e-07, 8.48612397192046e-08, 0.370184441863085, 
0.0773444299723239, 1580.93083600716, 25.4862794021994, 30.2642707469218, 
224.214639928028, 14.7414363362227, 18.0511919451453, 21037.258121794, 
21659.968905852, 17721957.0100965, 41240.6588986806, 111.028537460958, 
21.7975275086975, 276.44178388089, 171.535750708364, 6.54776065462672, 
151.823636593007, 77.7232628471612, 378439.528032194, 8.9932059191815e-10, 
7.49689679316569e-08, 0.0155924907385915, 1032.31959077079, 69.010587250471, 
3136.70323628637, 249713.871697334, 19360.5708508639, 40.7258690163879, 
0.0162957051889601, 1.02869393872855e-06, 0.025268197376688, 
0.528481476061038, 0.982629085096339, 9.45655313066933e-07, 4.57557582847333e-05, 
7.45403294058092e-05, 4.53918933391971, 3.30530837062386e-13, 
0.630234341296706, 9.82668496529192e-08, 8.53389810467837e-08, 
9.02891336492619, 5451.02888390797, 3.90681590706977, 329.545150676593, 
103.491400305633, 697.038514954349, 222.73520900148, 10798.3042798457, 
21.0644243649671, 43176.6607108169, 4235.53654423626, 3100.32036580987, 
0.474678829666085, 6.40621457829452, 122.637549472055, 43.0666245228938, 
12.0250322640284, 61440.278302552, 6788575.58160297, 51.9360282881212, 
769.96899739087, 7.59005145509618e-09, 2.43526615569376e-14, 
7.39725489778816e-07, 0.000232784090617743, 2.71678851958226e-05, 
7.42801688358956e-06, 0.000419885957835749, 13.5780839769886, 
3.32442709394189, 0.335486082296544, 3.94230896978352, 1.46425278783307, 
8.69549979650646, 596385.229504125, 0.000115943040096764, 3628.23773839244, 
49454.7726336256, 0.000504974333790079, 0.00995546823577904, 
0.233933121119438, 0.363364289185792, 9193.93256769758, 354.456908896329, 
5661.68504768727, 0.121589829029783, 940.93343158607, 2.03003608173289e-18, 
0.0149649659043151, 4.52682955802236e-10, 7.15334079727642e-09, 
0.000310851843411754, 1.93389728243117e-06, 2.03883508956486e-07, 
0.00284517176384008, 540.061334125012, 21318282.1015595, 14894.4660549342, 
0.000266471541489485, 0.246672590081899, 0.102617416010794, 30584.5294303485, 
1.6644151457974, 0.274144521451231, 5.61250055231602, 801087.819256331, 
649321.765215902, 1.09526223361541, 3.19905699111348e-05, 0.383890848761449, 
895.643897487244, 2.68459116542856, 26.4804232740359, 5.94041739131986, 
1.53119475830081e-07), effect = c(-0.0048929408170183, 0.0543448544236634, 
0.355139910284011, -0.0793902472151885, -0.0177086113171934, 
-0.0229346227548993, 0.0859476877708055, 0.0616530901499479, 
0.0255808327961239, 0.0587050814255305, 0.0141476490245787, 0.016845032477233, 
0.0534824934671667, 0.109055235276048, 0.111112652283139, 0.0234941463950778, 
0.0509358202565552, 0.0252735688725701, 0.0359067099796669, 0.00562271637183446, 
0.0507704293161921, 0.17283228087345, 0.16140675832248, -0.0818286747635847, 
-0.00755469414427661, -0.0104447567093411, -0.128088271682644, 
-0.0534210973538898, -0.373370146687058, -0.0158548424704536, 
-0.0748163315974356, -0.0904460324042191, -0.0028512716452736, 
0.014271561838011, -0.00190156753813359, -0.0239279177026479, 
-0.0094336807819733, 0.0222425549129021, 0.0292506342181443, 
0.0325754202368439, 0.0148015986703938, 0.0421882264651577, 0.423260142208342, 
0.0203382101649578, 0.00402969463133637, 0.0866038959569813, 
-0.0126180724522637, -0.00101624925914612, 0.0424729539424711, 
0.0109268890743347, -0.100768815837666, -0.00606344260837149, 
-0.0909174554780339, -0.0959700647301915, -0.0768705808220001, 
-0.0662807953036616, -0.00706464147110935, -0.0260825101925435, 
-0.116360501719279, -0.0685817739681672, 0.0190371136722137, 
0.314176452865903, 0.0852019981707266, -0.109955683402951, -0.0429494359040651, 
-0.018893257986317, 0.0359280715736875, -0.00777719486360404, 
0.0268854711195253, 0.035717165605315, -0.0185632636448169, 0.00219893106540051, 
-0.0575168050187894, -0.0268860255228866, -0.0120997481434518, 
-0.0174770295188239, -0.0365387268315564, 0.00427667014560775, 
0.0290413811465955, -0.0303874959875708, 0.0494496371834744, 
-0.0172878730121681, -0.0596619493875312, 0.0674472930186462, 
0.0581172695200586, 0.0352865160196343, -0.0390338901505756, 
0.0201101954340249, 0.0968644367520139, -0.00587675128187206, 
-0.0990223012750421, -0.022532243059551, -0.109508938534005, 
-0.0828800247402709, -0.0224991372217077, -0.0864470271893071, 
-0.0120276456354962, -0.171616504240665, -0.0405716645109222, 
-0.150207882114913, 0.019187309212901, 0.0583618216547288, 0.312977089073896, 
-0.116708039798045, -0.0727212548658722, -0.0334904589242441, 
0.0250211767009604, -0.0262773156800457, -0.00638328497889965, 
0.0207436409328599, 0.00526977878443117, 0.0121248749949723, 
0.0372084648778052, 0.0119773388777849, 0.0299841410899367, 0.0179852238184209, 
0.00615922907815808, 0.0923011852715508, 0.0286655081413075, 
0.0615892570124506, -0.040101427234219, 0.00471273799312188, 
-0.0695325837078327, -0.0194435878635383, -0.0113447270023325, 
-0.052896201189637, 0.15391622949438, 0.0625317280746324, 0.305195811975115, 
0.0175140430499281, 0.0944330305254164, 0.125486034995771, 0.204097960624017, 
0.0139041133925463, 0.115503245160239, 0.0744749299835659, 0.0309401153645095, 
0.0774734185854047, 0.128577840642144, -0.00523940764293137, 
-0.0826725654792668, 0.00061718469555555, -0.139447399226457, 
-0.015892803158233, -0.0776351210087576, -0.114375795737603, 
0.506655172546014, 0.0139569906287469, 0.032593809131997, 0.0838209562382717, 
0.026889024005808, 0.114847700394033, 0.0344957168306127, 0.309849172983949, 
0.224583305802426, 0.0920680732068372, 0.20205450223499, 0.129261938040113, 
0.118741527574873, 0.0666598681717314, -0.0259685736746482, -0.00493768230442141, 
-0.0513043909367941, -0.0228292902998043, -0.125120892334107, 
-0.0354061460089046, -0.145910823420589, -0.0505094213129978, 
-0.357522550450534, -0.0492725484140125, -0.00672879449498781, 
-0.00498836470563034, 0.0857101915123005, 0.245202106389044, 
0.0652610111098569, 0.00803793757485241, 0.0456354806905821, 
0.0567597911088563, 0.155069881077418, 0.0398552868265476), direction = c(-1, 
1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 
-1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 
-1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, 
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, 
1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 
-1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 
-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1), 
    plotval = c(-4.65436783913808, 7.4638390305887, -0.166061251006543, 
    3.15451610300161, 3.32743565041216, -3.36193787665198, 8.34218160099397, 
    -0.45134660936061, -0.861806358039495, 3.14989059429165, 
    -0.385424005854277, -2.11343559832442, 0.699014672037075, 
    -0.497079129132047, -0.104056259146589, -2.02963110287305, 
    -3.7673992980343, 1.12925537854411, 0.744739988834407, -2.95268419318977, 
    -1.36623884628847, 4.98189411623867, 0.0868661499973576, 
    3.28662435286223, 0.351109352101632, -1.57943969693098, -0.688197955780953, 
    0.857822769551858, 1.73066263028667, -1.48883721139058, -0.380556286225031, 
    -1.78716235272839, -0.809302569419764, -6.02028725962301, 
    -5.84785296501876, -3.073500877557, -0.967454268269813, -5.38748192000237, 
    -5.57408775663275, -3.96068672995749, 7.50597726212444, 4.69864253925926, 
    4.14916000637992, -0.386038843759309, -3.20486151733282, 
    -0.780262082752201, -0.507578804102515, -4.59710189032113, 
    -2.67740750044583, -2.65866587397551, -0.670087259849411, 
    -2.95884232700787, 11.6925265676543, 3.11870850390026, 3.94744095721937, 
    2.72176024102353, 1.08835175932808, -1.49196040507446, -1.8073900579076, 
    2.66167617047025, 0.485938344726535, 6.59364503804761, 7.0712906280104, 
    0.431581837757606, 1.11157095694052, -3.19891287043981, -1.40630643990113, 
    -1.48093021354005, -2.35066396611971, -1.16853980119637, 
    -1.25650588425321, -4.32298913566366, -4.3356578288347, -7.24851167871111, 
    -4.61532559535481, -2.04543461904724, -1.33840723441989, 
    -2.4416036868115, -2.23435464751167, -0.816092795927033, 
    -2.18133938975974, -1.89055102413018, -5.57799649218455, 
    9.04608546234764, 7.12511846787433, 1.80708450523289, -3.01381416921109, 
    -1.83891572308132, -3.49647343200987, -5.39744266823951, 
    -4.28691815843339, -1.6098703601382, 1.7879268409032, 5.98771381910823, 
    1.59742573937338, 0.276970230656392, 0.00761038521452666, 
    6.02426713306055, 4.33955424293266, 4.12760869236016, -0.656978297958022, 
    12.4807880165375, 0.200497935929844, 7.00759296681644, 7.06885254695129, 
    -0.955635485860221, -3.73647848327309, -0.591822947332438, 
    -2.51791492529225, -2.01490426327141, -2.84325677575944, 
    -2.34778887382083, -4.03335556106781, -1.32354959550492, 
    -4.63524905089898, -3.62690843318892, -3.49140657316158, 
    0.323600137070818, -0.806601481409993, -2.08862346391581, 
    -1.63414083395139, -1.08008625029083, -4.78845317422705, 
    -6.83177865764632, -1.71546873469442, -2.88647323876581, 
    8.11975527988995, 13.6134535668385, 6.13092941593436, 3.63304670440456, 
    4.56594416664396, 5.1291271177969, 3.37686864914492, -1.13283849034736, 
    -0.521716813134629, 0.474325491909851, -0.595750658150867, 
    -0.165616059566562, -0.939294549263021, -5.77552687887169, 
    3.93575531635149, -3.55969573624066, -4.6942082095516, 3.29673069510235, 
    2.0019383089733, 0.630908284813054, 0.439657756641714, -3.96350131412125, 
    -2.54956344582082, -3.75294570645333, 0.915102752209537, 
    -2.97355889939168, 17.6924962428955, 1.82492426830489, 9.34420585704084, 
    8.14549108393769, 3.50744655283763, 5.71356659688074, 6.6906179005526, 
    2.54589150999432, -2.732443084933, -7.32875220486331, -4.17302493900107, 
    3.57434916575198, 0.607879106033299, 0.98877892542788, -4.48550180288597, 
    -0.221261659119412, 0.562020428705443, -0.749156396749516, 
    -5.90368012822885, -5.81245996063456, -0.039518112762786, 
    4.49497802290257, 0.415792240525927, -2.95213537116121, -0.428878156658466, 
    -1.42292492276573, -0.773816960869839, 6.81496956627369), 
    category = c("Measured", "Measured", "Measured", "Measured", 
    "Measured", "Measured", "Measured", "Measured", "Measured", 
    "Measured", "Measured", "Measured", "Measured", "Measured", 
    "Measured", "Measured", "Measured", "Measured", "Measured", 
    "Measured", "Measured", "Measured", "Measured", "Measured", 
    "Measured", "Measured", "Measured", "Measured", "Measured", 
    "Measured", "Measured", "Measured", "Measured", "Measured", 
    "Measured", "Measured", "Measured", "Measured", "Measured", 
    "Measured", "Measured", "Measured", "Measured", "Measured", 
    "Measured", "Measured", "Measured", "Measured", "Measured", 
    "Measured", "Measured", "Measured", "Measured", "Measured", 
    "Measured", "Measured", "Measured", "Measured", "Measured", 
    "Measured", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived", "Derived", "Derived", "Derived", "Derived", "Derived", 
    "Derived")), .Names = c("Measurement", "variable", "Pval", 
"effect", "direction", "plotval", "category"), row.names = c(21L, 
22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 
35L, 36L, 37L, 38L, 39L, 40L, 61L, 62L, 63L, 64L, 65L, 66L, 67L, 
68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 76L, 77L, 78L, 79L, 80L, 
101L, 102L, 103L, 104L, 105L, 106L, 107L, 108L, 109L, 110L, 111L, 
112L, 113L, 114L, 115L, 116L, 117L, 118L, 119L, 120L, 141L, 142L, 
143L, 144L, 145L, 146L, 147L, 148L, 149L, 150L, 151L, 152L, 153L, 
154L, 155L, 156L, 157L, 158L, 159L, 160L, 181L, 182L, 183L, 184L, 
185L, 186L, 187L, 188L, 189L, 190L, 191L, 192L, 193L, 194L, 195L, 
196L, 197L, 198L, 199L, 200L, 221L, 222L, 223L, 224L, 225L, 226L, 
227L, 228L, 229L, 230L, 231L, 232L, 233L, 234L, 235L, 236L, 237L, 
238L, 239L, 240L, 261L, 262L, 263L, 264L, 265L, 266L, 267L, 268L, 
269L, 270L, 271L, 272L, 273L, 274L, 275L, 276L, 277L, 278L, 279L, 
280L, 301L, 302L, 303L, 304L, 305L, 306L, 307L, 308L, 309L, 310L, 
311L, 312L, 313L, 314L, 315L, 316L, 317L, 318L, 319L, 320L, 341L, 
342L, 343L, 344L, 345L, 346L, 347L, 348L, 349L, 350L, 351L, 352L, 
353L, 354L, 355L, 356L, 357L, 358L, 359L, 360L), class = "data.frame") 
+3

В то время как ваш 'голова (mockdata)' отличный старт, я думаю, размещая выход 'dput (mockdata)' может сделать этот вопрос более воспроизводимым. – JasonAizkalns

+0

Если вам просто нужно несколько графиков, я бы экспортировал в svg и делал это с помощью inkscape. – timat

ответ

3

Вариант 1

Использование фасетов

mockdata$type = ifelse(mockdata$variable %in% LETTERS[1:3], "1", "2") 

ggplot(mockdata) + 
    facet_wrap(~ type, scales='free_x') + 
    geom_tile(aes(variable, Measurement, fill = mockdata$plotval), colour = "dark red") + 
    scale_fill_gradient2(limits=c(-20, 20),high = "firebrick3", low = "dodgerblue4") + 
    theme_minimal() + 
    theme(axis.text.x=element_text(size=28, angle=90), axis.text.y=element_text(size=28)) + 
    labs(title="", x="", y="", fill="") 

enter image description here

Хотя это не совсем совершенна, потому что падение неиспользованную x- для каждой оси необходимо указать scales='free_x' - который, к сожалению, не сохраняет коробки одинаковой ширины в каждой грани.

Option2

Чтобы исправить это, мы также можем установить space="free_x" в facet_grid. Что я думаю, что дает то, что вы ищете:

ggplot(mockdata) + 
    facet_grid(~ type, scales='free_x', space="free_x") + 
    geom_tile(aes(variable, Measurement, fill = mockdata$plotval), colour = "dark red") + 
    scale_fill_gradient2(limits=c(-20, 20),high = "firebrick3", low = "dodgerblue4") + 
    theme_minimal() + 
    theme(axis.text.x=element_text(size=28, angle=90), axis.text.y=element_text(size=28)) + 
    labs(title="", x="", y="", fill="") 

enter image description here

Вариант 3

Альтернативным решением является создание отдельных участков для каждой категории, а также организовать их вместе. Здесь я положил их вместе с помощью cowplot::plot_grid, что позволяет установить относительные ширины, как мы хотим, чтобы их (хотя, возможно, придется подправить rel_widths ценности немного, чтобы получить это только право):

library(cowplot) 
p1 <- ggplot(mockdata[which(mockdata$type=="1"),]) + 
    geom_tile(aes(variable, Measurement, fill = plotval), colour = "dark red") + 
    scale_fill_gradient2(limits=c(-20, 20), high = "firebrick3", low = "dodgerblue4") + 
    theme_minimal() + 
    theme(axis.text.x=element_text(size=28, angle=90), axis.text.y=element_text(size=28), 
     legend.position="none") + 
    labs(title="", x="", y="", fill="") 

p2 <- ggplot(mockdata[which(mockdata$type=="2"),]) + 
    geom_tile(aes(variable, Measurement, fill = plotval), colour = "dark red") + 
    scale_fill_gradient2(limits=c(-20, 20),high = "firebrick3", low = "dodgerblue4") + 
    theme_minimal() + 
    theme(axis.text.x=element_text(size=28, angle=90), axis.text.y=element_blank()) + 
    labs(title="", x="", y="", fill="") 

plot_grid(p1,p2, nrow = 1, rel_widths = c(1,2)) 

enter image description here

Вариант 4

Вы можете создать дополнительный коэффициент в данных, который находится между столбцами, которые вы хотите разделить, а затем нарисовать плитки для этого столбца в белом цвете.

mockdata = rbind(mockdata, 
       data.frame(Measurement=1:20, 
          variable="", 
          Pval = NA, 
          effect = NA, 
          direction = NA, 
          plotval = 0, 
          category = "Measured")) 
mockdata$variable = factor(mockdata$variable, levels = c("A", "B", "C", "", "a", "b", "c", "d", "e","f")) 

ggplot(mockdata, aes(variable, Measurement)) + 
    geom_tile(fill = NA, colour = NA) + 
    geom_tile(data = mockdata[which(mockdata$variable==""),], fill = "white", colour = "white") + 
    geom_tile(data = mockdata[which(mockdata$variable!=""),], aes(fill = plotval), colour = "dark red") + 
    scale_fill_gradient2(limits=c(-20, 20),high = "firebrick3", low = "dodgerblue4") + 
    theme_minimal() + 
    theme(axis.text.x=element_text(size=28, angle=90), axis.text.y=element_text(size=28)) + 
    labs(title="", x="", y="", fill="") 

enter image description here

+0

Это правда, что это неоптимально. Я уже пробовал это решение и, следовательно, требовал «сохранить ту же ширину». Есть ли способ жестко кодировать ширину плиток, о которых вы знаете? – Sigurgeir

+0

@Sigurgeir см. Обновление – dww

+0

Хорошо, я думаю, хотя это также требует некоторой настройки. На самом деле у меня нет таких простых меток, и более сложные метки затрудняют настройку высоты и ширины. Я принял ответ, но если какой-либо будущий читатель этого комментария получит лучшее решение, мне было бы интересно узнать об этом. – Sigurgeir