From d807a7d14db7cc864b3822290d79ea976d10fd3b Mon Sep 17 00:00:00 2001
From: yun
utilize the ggheat
scale_*
function directly from ggplot2. All
guide legends will directly extracted from ggplot2
. The
essential parameter of ggheat
is ggfn
, which
-accepts a ggplot2 object equipped with a default data and mappings
-established via
-ggplot(data, aes(.data$.column, .data$.row))
. By default,
-the data includes 7 columns, each prefixed with a dot for caution.
ggplot(data, aes(.data$x, .data$y))
. the data contains
+following columns:
.slice
: slice number, combine
.slice_row
and .slice_column
.
.slice_row
: the slice row number.
.slice_column
: the slice column number.
.row
and .column
: the row and column
-coordinates.
.slice_row
: the slice row number
.slice_column
: the slice column number
.row_names
and .column_names
: the row
+and column names of the original matrix (only applicable when names
+exist).
.row_index
and .column_index
: the row
-and column index of the original
x
and y
: the x
and
+y
coordinates
value
: the actual matrix value for the heatmap
+matrix.
pdf(NULL)
draw(ggheat(small_mat, function(x) {
print(head(x$data))
x
}))
-#> .row_index .column_index .slice_row .slice_column .row .column .slice
-#> 1 1 1 1 1 2 1 r1c1
-#> 2 1 2 1 1 2 8 r1c1
-#> 3 1 3 1 1 2 6 r1c1
-#> 4 1 4 1 1 2 2 r1c1
-#> 5 1 5 1 1 2 3 r1c1
-#> 6 1 6 1 1 2 7 r1c1
-#> values
-#> 1 0.9047416
-#> 2 -0.3522982
-#> 3 0.5016096
-#> 4 1.2676994
-#> 5 0.8251229
-#> 6 0.1621522
ggheat
All the functionalities of the ComplexHeatmap::Heatmap
function can be used as is.
ggheat
While the legends are controlled by ggplot2
. However,
-the default legend name is taken from
-ComplexHeatmap::Heatmap
in order to maintain
-consistency.
While the legends are controlled by ggplot2
, the default
+legend name is taken from ComplexHeatmap::Heatmap
in order
+to maintain consistency.
draw(
ggheat(small_mat, function(p) {
p + scale_fill_viridis_c()
@@ -882,9 +885,9 @@ ggheat
ggheat(small_mat, function(p) {
p +
geom_tile(
- aes(fill = values),
+ aes(fill = value),
width = 1L, height = 1L,
- data = ~ dplyr::filter(p$data, .row <= .column)
+ data = ~ dplyr::filter(.x, y <= x)
) +
theme_bw() +
theme(
@@ -893,24 +896,29 @@ ggheat
)
}, rect_gp = gpar(type = "none"), column_km = 2L, row_km = 3)
)
gganno
The same with ggheat
, the essential parameter of
gganno
is also the ggfn
, which accepts a
-ggplot2 object equipped with a default data and mappings established by
-ggplot(data, aes(.data$.x (or .data$.y)))
. The original
-matrix will be converted into a data.frame with another 3 columns
-added:
ggplot(data, aes(.data$x))
/
+ggplot(data, ggplot2::aes(y = .data$y))
. The original
+matrix will be converted into a long-data.frame (gganno
+always regard row as the observations) with following columns.
.slice
: the slice row (which = “row”) or column
-(which = “column”) number.
.x
/.y
: indicating the x-axis (or
-y-axis) coordinates. Don’t use ggplot2::coord_flip
to flip
-coordinates as it can disrupt internal design.
.index
: denoting the row index of the original
-matrix, where rows are uniformly considered as observations and columns
-as variables.
.slice
: the slice row (which = “row”) or column (which
+= “column”) number..row_names
and .column_names
: the row and
+column names of the original matrix (only applicable when names
+exist)..row_index
and .column_index
: the row and
+column index of the original matrix.x
/ y
: indicating the x-axis (or y-axis)
+coordinates. Don’t use [coord_flip][ggplot2::coord_flip] to flip
+coordinates as it may disrupt internal operations.value
: the actual matrix value of the annotation
+matrix.gganno
can be seamlessly combined with both
ggheat
and ComplexHeatmap::Heatmap
, although
@@ -921,17 +929,15 @@
gganno
Legends will also be extracted, in the similar manner like passing
them into annotation_legend_list
.
gganno
draw(ggheat(small_mat,
top_annotation = HeatmapAnnotation(
foo = gganno(
matrix = anno_data,
function(p) {
- p + geom_boxplot(aes(y = V1, fill = factor(.slice)))
+ p + geom_boxplot(aes(y = value, fill = factor(.slice)))
}, height = unit(5, "cm")
), which = "column"
), column_km = 2L
), merge_legends = TRUE)
#> ℹ convert simple vector to one-column matrix
box_matrix1 <- matrix(rnorm(ncol(small_mat)^2L, 10), nrow = ncol(small_mat))
colnames(box_matrix1) <- rep_len("group1", ncol(small_mat))
@@ -970,38 +976,33 @@ gganno
foo = gganno(
matrix = cbind(box_matrix1, box_matrix2),
function(p) {
- long_data <- ~ tidyr::pivot_longer(.x, starts_with("group"),
- names_to = "group"
- )
- p +
- geom_violin(
- aes(
- y = value, fill = factor(group),
- color = factor(.slice),
- group = paste(.slice, .index, group, sep = "-")
- ),
- data = long_data
- ) +
- geom_boxplot(
- aes(
- y = value, fill = factor(group),
- color = factor(.slice),
- group = paste(.slice, .index, group, sep = "-")
- ),
- width = 0.2,
- position = position_dodge(width = 0.9),
- data = long_data
- ) +
- scale_fill_brewer(
- name = "Group", type = "qual", palette = "Set3"
- ) +
- scale_color_brewer(
- name = "Slice", type = "qual", palette = "Set1"
- )
- }, height = unit(3, "cm")
- ), which = "column"
- ), column_km = 2L
-), merge_legends = TRUE)
draw(ggheat(small_mat,
@@ -1009,15 +1010,15 @@ gganno
foo = gganno(
matrix = anno_data,
function(p) {
- p + aes(y = V1) + geom_text(aes(label = .index))
+ p + aes(y = value) + geom_text(aes(label = .row_index))
}, height = unit(2, "cm")
), which = "column"
),
bottom_annotation = HeatmapAnnotation(
foo = gganno(
function(p) {
- p + aes(y = V1) +
- geom_text(aes(label = .index)) +
+ p + aes(y = value) +
+ geom_text(aes(label = .row_index)) +
scale_y_reverse()
},
matrix = anno_data,
@@ -1028,8 +1029,8 @@ gganno
right_annotation = HeatmapAnnotation(
foo = gganno(
function(p) {
- p + aes(x = V1) +
- geom_text(aes(label = .index))
+ p + aes(x = value) +
+ geom_text(aes(label = .row_index))
},
matrix = anno_data,
width = unit(3, "cm")
@@ -1039,8 +1040,8 @@ gganno
left_annotation = HeatmapAnnotation(
foo = gganno(
function(p) {
- p + aes(x = V1) +
- geom_text(aes(label = .index)) +
+ p + aes(x = value) +
+ geom_text(aes(label = .row_index)) +
scale_x_reverse()
},
matrix = anno_data,
@@ -1054,7 +1055,7 @@ gganno
#> ℹ convert simple vector to one-column matrix
#> ℹ convert simple vector to one-column matrix
#> ℹ convert simple vector to one-column matrix
gganno
can work with Heatmap
function, but
cannot extract the legend.
gganno
anno_gg
and
anno_gg2
3;_IJa9797x6N2MFCnu*|g;bivfi9Lc
zg}D|VubuINmX;P1g2!Ef!0kALZm&+0l9H}Ycf$;NNid#2|LWr6E!Fzg9$w2VEKK(3
zo&^~BZw*zIl};`$X>7)R(*e-mpgJc?ey6qIl9G~XjkeVC!*5DTN+O{BH0|5mkdTmq
zf`UAyj5q5eA<_)-lZ6^`#Zth);pn)x!IC*Qd&qrH4i8_gk8pBu>@PG6nDxF=Av4Gu
zGiY$477);jdw8!S@Ln$u4_CzW5!|5_zv&f@pyx@x#ZZcg7Db9dlNxEoFb1B1Rqb+7x-oouai8}@^TX7XW?g9;LlFJuX3Ju
0V^?RLcW
zIfKAN!WMcQ2S!i}`JNXo4`?GuTf_+-D*l#=6mKrN;3-_yXdYvojT}fgb>{gK&%u^i
zLCG9nwwPZV9!w9XtJigt4b;=FSL*9d+YR&W-Viy+1SGCk|F%4eq)%2o=;y!HKq(OG
zT=Cao@-BnS{bF10P0d~-UyV(>LyUE-;(Duhc&);Lh_fe-pB*YO8D@*h)=1mT2^*
zd3w4+y_6J3#f{rBz#_A+_2Tqb*@v++-=FNC_t~?^4w*j!+v3N99%NjMn1_diL_q>OsBf$}ZcuykINr6tT(vF!IeSWC(q_KSarP>d?9d*^^o?ON1EiFurC0-D^(d4-Od
z54)Ilue^4Hl8|?Jv3ijzv4d|MAFi{(Sd`G*)7A2Ki12%{Q(MgewR|p_OXoNy1O%K<
zGv_h_WSZ%H(_Gy}lS|0z)ehyjGaC<`604~Za%v7lq0UR?@7kJUUWF`eobt@;%EqNw
zBUbl_Ifiuub0-(I-LTyzXEn5cCUr%KO6VyYP+Hh#emZG{%+~?X7CHtW92(j{r7!|H
zxTYZ>dB9D7UWa{(l%aL37ZFd}z_HTS(mD|43NX|5d#|je)s4gwMY<41sN@5(*Af6X
zK$Z*STW}vhsTjAazQ%hruAttBe9FX?@PXyUvG7drK9@&RX``Q?*+ZBA
z(wAS!lI;~v5Ie)$atLeANrVeJh2IWM!O!}(==N&*a8Bp6!z8ZgdQJ%*;c