文章目录
- 介绍
- 案例
- 安装R包
- 教程1
- 教程2
- 参考
介绍
这个包扩展了ggplot2,提供了用于对齐和组织多个图的高级工具,特别是那些自动重新排序观察结果的工具,比如树形图。它提供了对布局调整和情节注释的精细控制,使您能够创建复杂的、出版质量的可视化,同时仍然使用熟悉的ggplot2语法。
This package extends ggplot2 by providing advanced tools for aligning and organizing multiple plots, particularly those that automatically reorder observations, such as dendrogram. It offers fine control over layout adjustment and plot annotations, enabling you to create complex, publication-quality visualizations while still using the familiar grammar of ggplot2.
案例
安装R包
install.packages("ggalign")
install.packages("ggalign",
repos = c("https://yunuuuu.r-universe.dev", "https://cloud.r-project.org")
)
# install.packages("remotes")
remotes::install_github("Yunuuuu/ggalign")
教程1
library(ggalign)
expr <- read_example("gene_expression.rds")
mat <- as.matrix(expr[, grep("cell", colnames(expr))])
base_mean <- rowMeans(mat)
mat_scaled <- t(apply(mat, 1, scale))
type <- gsub("s\\d+_", "", colnames(mat))
heat1 <- ggheatmap(mat_scaled) -
scheme_align(free_spaces = "l") +
scale_y_continuous(breaks = NULL) +
scale_fill_viridis_c(option = "magma") +
# add dendrogram for this heatmap
anno_top() +
align_dendro() +
# add a block for the heatmap column
ggalign(data = type, size = unit(1, "cm")) +
geom_tile(aes(y = 1, fill = factor(value))) +
scale_y_continuous(breaks = NULL, name = NULL) +
scale_fill_brewer(
palette = "Set1", name = "type",
guide = guide_legend(position = "top")
)
heat2 <- ggheatmap(base_mean, width = unit(2, "cm")) +
scale_y_continuous(breaks = NULL) +
scale_x_continuous(name = "base mean", breaks = FALSE) +
scale_fill_gradientn(colours = c("#2600D1FF", "white", "#EE3F3FFF")) +
# set the active context of the heatmap to the top
# and set the size of the top stack
anno_top(size = unit(4, "cm")) +
# add box plot in the heatmap top
ggalign() +
geom_boxplot(aes(y = value, fill = factor(.extra_panel))) +
scale_x_continuous(expand = expansion(), breaks = NULL) +
scale_fill_brewer(
palette = "Dark2", name = "base mean",
guide = guide_legend(position = "top")
) +
theme(axis.title.y = element_blank())
heat3 <- ggheatmap(expr$type, width = unit(2, "cm")) +
scale_fill_brewer(palette = "Set3", name = "gene type") +
scale_x_continuous(breaks = NULL, name = "gene type") +
# add barplot in the top annotation, and remove the spaces in the y-axis
anno_top() -
scheme_align(free_spaces = "lr") +
ggalign() +
geom_bar(
aes(.extra_panel, fill = factor(value)),
position = position_fill()
) +
scale_y_continuous(expand = expansion()) +
scale_fill_brewer(palette = "Set3", name = "gene type", guide = "none") -
scheme_theme(plot.margin = margin())
stack_alignh(mat_scaled) +
stack_active(sizes = c(0.2, 1, 1)) +
# group stack rows into 5 groups
align_kmeans(centers = 5L) +
# add a block plot for each group in the stack
ggalign(size = unit(1, "cm"), data = NULL) +
geom_tile(aes(x = 1, fill = factor(.panel))) +
scale_fill_brewer(palette = "Dark2", name = "Kmeans group") +
scale_x_continuous(breaks = NULL, name = NULL) +
# add a heatmap plot in the stack
heat1 +
# add another heatmap in the stack
heat2 +
# we move into the stack layout
stack_active() +
# add a point plot
ggalign(data = expr$length, size = unit(2, "cm")) +
geom_point(aes(x = value)) +
labs(x = "length") +
theme(
panel.border = element_rect(fill = NA),
axis.text.x = element_text(angle = -60, hjust = 0)
) +
# add another heatmap
heat3 &
theme(
plot.background = element_blank(),
panel.background = element_blank(),
legend.background = element_blank()
)
教程2
mat <- read_example("measles.rds")
ggheatmap(mat, filling = FALSE) +
geom_tile(aes(fill = value), color = "white") +
scale_fill_gradientn(
colours = c("white", "cornflowerblue", "yellow", "red"),
values = scales::rescale(c(0, 800, 1000, 127000), c(0, 1))
) +
theme(axis.text.x = element_text(angle = -60, hjust = 0)) +
anno_right() +
align_dendro(plot_dendrogram = FALSE) +
anno_top(size = unit(2, "cm")) +
ggalign(data = rowSums) +
geom_bar(aes(y = value), fill = "#FFE200", stat = "identity") +
scale_y_continuous(expand = expansion()) +
ggtitle("Measles cases in US states 1930-2001\nVaccine introduced 1961") +
theme(plot.title = element_text(hjust = 0.5)) +
anno_right(size = unit(2, "cm")) +
ggalign(data = rowSums) +
geom_bar(aes(x = value),
fill = "#FFE200", stat = "identity",
orientation = "y"
) +
scale_x_continuous(expand = expansion()) +
theme(axis.text.x = element_text(angle = -60, hjust = 0))
参考
- https://github.com/Yunuuuu/ggalign/tree/main
- https://yunuuuu.github.io/ggalign-book/