Reputation: 1120
I would like to use Upset plot instead of venn diagram to show overlap between specific groups (20 in total). However, one of the group (number 10) is the most important for me and I would like to present how many unique values is in that specific fraction. I would like to present ~25-30 intersections in total on the graph but uniqueness of group 10 has to be also shown.
I know existence of sets
function but I would like to present around 25-30 intersections as mentioned and this 1 group additionally.
Any ideas ?
EDIT: Added reproducible example:
dput(rep_exp)
structure(list(Gr_4 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, 24.4310955935393, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA), Gr_5 = c(NA, NA, NA, 21.8310535918369,
NA, NA, NA, NA, NA, 20.7254228450715, NA, 27.1619253143803, NA,
NA, NA, NA, NA, NA, NA, 26.6027203831498, NA, NA, NA, NA, NA,
NA, 30.8729830402671, NA, NA, NA), Gr_6 = c(28.8390902059829,
24.67734371881, 22.683139406727, 29.1546773298581, NA, NA, 21.9107159172821,
NA, 22.9230495998744, 26.9880437180908, NA, 32.391666051163,
NA, NA, NA, 21.6001415858001, 23.0239282537894, NA, 21.055168555216,
30.7121903523751, NA, NA, NA, NA, 22.0963548474675, NA, 32.513357598066,
NA, NA, 23.7976852708585), Gr_7 = c(21.4265985064224, NA, NA,
23.0695638371137, NA, NA, NA, NA, NA, 20.7903453146324, NA, 28.2499758022535,
NA, NA, NA, NA, NA, NA, NA, 25.9613085520105, NA, NA, NA, NA,
NA, NA, 29.355377815192, NA, NA, 21.1302512982254), Gr_8 = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 21.8730880931062, NA,
NA, NA, NA, NA, NA, NA, 22.4189005564519, NA, NA, NA, NA, NA,
NA, 30.2275670312356, NA, NA, NA), Gr_9 = c(22.195894810917,
25.9203441316619, NA, 23.5317193622031, NA, NA, NA, 20.4526193062251,
NA, 22.357699113594, 19.9767319209274, 29.0184743803346, NA,
NA, NA, NA, 22.1010446624755, NA, NA, 26.3118997535445, NA, NA,
NA, NA, NA, NA, 29.9658173049532, NA, NA, 22.7388204380555),
Gr_10 = c(24.9716280984187, 26.6702013159945, NA, 26.0197313721615,
NA, NA, NA, 22.1233522815746, NA, 24.0516716332837, 22.4063679987568,
30.256761573029, NA, NA, NA, NA, 26.4434318913431, NA, NA,
27.9654320211905, NA, NA, NA, NA, NA, NA, 29.8212398361126,
NA, NA, 24.1442935303143), Gr_11 = c(22.9856008507804, 25.1691705265075,
NA, 26.0689081411402, NA, NA, NA, 21.1400234004731, NA, 24.5711480491199,
23.5402595534611, 29.329649538014, NA, NA, NA, NA, 28.6076666902364,
NA, NA, 26.5597151498881, NA, NA, 25.8334491330428, NA, NA,
NA, 29.7854239060885, NA, NA, 21.751849665826), Gr_12 = c(28.2942576160509,
28.4109042369708, NA, 30.2938411874268, 28.1159976488766,
26.6893919055319, NA, 20.2236435193017, NA, 31.1236147481775,
27.1394614209655, 33.7497512742728, NA, NA, NA, 22.1620175455317,
32.740995072413, NA, 23.2685659859292, 31.9204662366898,
NA, NA, 30.7601811119423, NA, NA, 22.8704941623247, 31.3416488641037,
NA, NA, 28.6773773257387), Gr_13 = c(27.9415091276483, 27.0299165363222,
NA, 30.7110417097659, 28.7379570773404, 25.5882365428802,
NA, NA, NA, 32.2667076588073, 27.2933369287433, 34.7079501935325,
NA, 22.8206916170467, NA, NA, 32.5779472688676, NA, NA, 32.6317048040664,
NA, NA, 30.1389490092958, 23.8308408919424, 23.0679896658325,
26.164689687244, 30.2006952484736, NA, 24.447772868487, 29.5606883639626
), Gr_14 = c(27.4616237005853, 26.7750499947566, NA, 30.3932526396929,
31.1062446290124, 27.2595253359549, NA, NA, NA, 33.6656430607522,
27.734214173453, 35.0800848727354, NA, NA, NA, 23.151279208873,
33.2366327906614, NA, NA, 33.4932145181405, 22.9608977649923,
NA, 31.8193222893087, 24.7850652730265, NA, 24.9920915833786,
29.0239557410047, 25.2744788247811, 26.6821750741598, 29.7891764054099
), Gr_15 = c(27.2029382158867, 25.3112934881725, NA, 29.1103329989503,
29.514275096105, NA, NA, NA, NA, 31.6854120776358, 28.5249970429603,
35.9001903675862, 22.4465240056921, NA, NA, NA, 31.8450938083269,
25.5788830788713, NA, 34.7663358707296, 25.6549086895753,
26.2291635318221, 31.9466351025545, 26.715548983008, NA,
25.6752720211283, 28.4457302899793, 27.2647239196348, 25.0412216502086,
31.6489022687779), Gr_16 = c(25.1843096821522, NA, NA, 26.444459119903,
23.8302606418847, NA, NA, NA, NA, 27.987230611469, 27.8591095189136,
32.8816869988268, NA, NA, 24.8165571469754, NA, 28.7689442058935,
25.2395434664377, NA, 32.829999906694, 23.6787411063596,
NA, 27.8325560998723, 25.9582137297807, NA, NA, 25.6769403745901,
25.3048339598422, 23.7070405817542, 29.8423911570548), Gr_17 = c(23.2209751780558,
NA, NA, 24.6434488773652, 22.5225058653221, NA, NA, NA, NA,
27.0216809889885, 26.6607134339159, 31.099676534797, NA,
NA, 26.93077937966, NA, 27.8090060912948, 26.7795654758791,
NA, 32.3731900255852, 24.9494014193233, NA, 24.5609834789349,
26.086325932043, NA, NA, 25.5082418618407, 23.6504233402429,
23.8014399755019, 28.7791270904749), Gr_18 = c(NA, NA, NA,
NA, NA, NA, 26.0401348427439, NA, NA, 24.3341543275568, 24.7556235529872,
30.4889365348298, NA, NA, 26.9888022043666, NA, 25.7387173773674,
27.1316334308385, NA, 31.571451882524, NA, NA, NA, 25.745888266175,
NA, NA, 23.2997781674234, NA, NA, 23.2402643606836), Gr_19 = c(NA,
NA, NA, NA, NA, NA, 24.3940790216008, NA, NA, NA, 21.4222413790374,
25.7991932672173, NA, NA, 25.9372380266141, NA, 22.9217973627502,
20.5334552143032, NA, 28.7776543930148, NA, NA, NA, 23.9298543509444,
NA, NA, 24.3614522942989, NA, NA, NA), Gr_20 = c(NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, 25.6961748124338, NA,
NA, NA, NA, NA, NA, NA, 26.4582321196234, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA), Gr_21 = c(NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, 22.8258042878256, NA, NA, NA, NA, NA,
NA, NA, 25.1317511650203, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA)), row.names = c(NA, 30L), class = "data.frame")
It is a code which has been used to generate a plot:
for (i in 1:nrow(rep_exp)) { rep_exp[i, ][is.na(rep_exp[i, ]) == F] = rownames(rep_exp)[i]}
n_sizescale=nrow(rep_exp)*1.2
p1 <- { upset( fromList(rep_exp),
nsets = ncol(rep_exp), nintersects = 35, order.by = "freq", #degree, freq
empty.intersections = "on", number.angles = 0, mb.ratio = c(0.55, 0.45), point.size = 2.5, line.size = 0.8,
text.scale = c(1.3, 1.3, 1, 1, 1, 1), mainbar.y.label = "Number of groups",
sets.x.label = "Groups",
show.numbers = "yes", keep.order = TRUE,
set_size.show = TRUE,
set_size.scale_max = n_sizescale)
}
If I understood correctly the idea of dots below barplot they indicate how many groups can be found in specific intersections and a single dot gives a number for that specific Gr
? Am I right ?
How to force and algorithm to show couple of "interesting" groups as a single dot (show uniqueness of this group) and other as intersections.
Can you (@krassowski) rewrite a code for the package you mentioned ?
Upvotes: 0
Views: 732