Introduction
官网:https://github.com/teunbrand/ggh4x/
ggh4x
包是 ggplot2
扩展包。它提供了一些实用函数,虽然这些函数并不完全符合“图形语法”的概念(它们可能有点hacky),但在调整ggplot绘图结果时仍然很有用。比如调整facet的大小、将多种美学映射到颜色以及指定facet的单独比例等等,下面介绍一些常用的功能:
可以从 CRAN 安装最新稳定版本的 ggh4x,如下所示:
install.packages("ggh4x")
或者可以使用以下命令从 GitHub 安装开发版本:
# install.packages("devtools")
devtools::install_github("teunbrand/ggh4x")
调整facets
扩展facets
facet_wrap2
和facet_grid2
函数扩展了ggplot2的分面功能。即使当scales=“fixed”(默认)时,也可以使用axes参数在(部分或全部)内面绘制轴。此外,可以选择省略轴标签,但通过设置remove_labels参数保留内部面的轴刻度。
library(ggh4x)
library(scales)
p <- ggplot(mpg, aes(displ, hwy, colour = as.factor(cyl))) + geom_point() +
labs(x = "Engine displacement", y = "Highway miles per gallon") +
guides(colour = "none")
p + facet_wrap2(vars(class), axes = "all", remove_labels = "x")
此外,facet_grid2() 还支持该包所谓的“独立”尺度。这缓解了 ggplot2::facet_grid() 的限制,即比例只能在布局的行和列之间自由,而允许比例在布局的行和列内自由。这保留了网格布局,但保留了包裹面中尺度的灵活性。请注意,在下图中,每个面板的 x 轴都是独立的。
p + facet_grid2(vars(year), vars(drv), scales = "free_x", independent = "x")
嵌套facets
ggh4x这个包因生成嵌套面而闻名;其中,如果外strip属于同一类别,则它们可以跨越内strip。
如果分面存在一些层次关系,这可能特别有用。
在下面的示例中,根据叶子的长短对鸢尾花进行分类:
new_iris <- transform(
iris,
Nester = ifelse(Species == "setosa", "Short Leaves", "Long Leaves")
)
iris_plot <- ggplot(new_iris, aes(Sepal.Width, Sepal.Length)) +
geom_point()
iris_plot +
facet_nested(~ Nester + Species, nest_line = element_line(linetype = 2)) +
theme(strip.background = element_blank(),
ggh4x.facet.nestline = element_line(colour = "blue"))
手动设计facets
为了实现对 ggplot2 方面的类似base-R的par(mar = c(2,2,1,1))
控制级别,facet_manual() 被引入。与layout()函数一样,facet_manual()需要预先指定哪些面板放置在哪里。
这些被称为“手动”构面,因为它不会像网格和环绕构面那样根据可用数据动态生成布局。在上图中赋予layout()函数的矩阵现在可以用作手动方面的设计参数。
# Setting up a design for a layout
design <- matrix(c(1,2,3,2), 2, 2)
p + facet_manual(vars(factor(drv)), design = design)
或者更灵活的设计:
design <- "
A##
AB#
#BC
##C
"
p + facet_manual(vars(drv), design = design)
细调strips
ggh4x提供了主题化的 strips。这些 strips 还允许你根据每个标签或每层图形设置 strip.text.*
和 strip.background.*
的主题选项。background_x/y
和 <