更改 facet_wrap() 条带位置以将小平面条带放置在绘图内
Change facet_wrap() strip positions to place facet strips inside plot
如何更改 facet_wrap()
条带位置,如下图所示?
数据框来自 问题。
enter image description here
实现您想要的结果的一个选项是通过 gggrid
包。与 ggplot2::annotation_custom
类似,它允许将 grobs 添加到 ggplot,但提供了更大的灵活性,例如您可以在每个面板上放置不同的 grob。此外,它允许访问引擎盖下由 ggplot2 创建的 data
和 coords
对象,并允许传递额外的美学。
基本上它需要一个函数来创建 grob,然后通过 gggrid::grid_panel
添加到 ggplot。对于 grob,我使用 gridtext::richtext_grob
这样可以很容易地向每个面板添加像文本框这样的条形文本。
library(ggplot2)
library(gggrid)
#> Loading required package: grid
library(gridtext)
set.seed(123)
ID <- rep(c("ABC123", "DEF456", "GHI789", "JKL012"), each = 10)
Vref <- c((runif(10, 1, 2)), (runif(10, 3, 5)), (runif(10, 6, 9)), (runif(10, 0, 2)))
Time <- rep(c(1:10), 4)
df <- data.frame(ID, Vref, Time)
tg <- function(data, coords) {
y_label <- max(coords$y)
gridtext::richtext_grob(data$label[which.max(coords$y)],
x = unit(0, "npc") + unit(.045, "npc"),
y = unit(y_label, "npc") + unit(2, "mm"),
hjust = 0,
vjust = 0,
valign = .5,
padding = unit(rep(4.4, 4), "pt"),
gp = grid::gpar(fontsize = 8, fill = "grey85"),
box_gp = grid::gpar(col = "grey85")
)
}
ggplot(df, aes(x = Time, y = Vref)) +
geom_col() +
scale_y_continuous(expand = expansion(mult = c(.05, .2))) +
facet_wrap(~ID, nrow = 2) +
gggrid::grid_panel(mapping = aes(label = ID), tg) +
theme(strip.text = element_blank())
如何更改 facet_wrap()
条带位置,如下图所示?
数据框来自
enter image description here
实现您想要的结果的一个选项是通过 gggrid
包。与 ggplot2::annotation_custom
类似,它允许将 grobs 添加到 ggplot,但提供了更大的灵活性,例如您可以在每个面板上放置不同的 grob。此外,它允许访问引擎盖下由 ggplot2 创建的 data
和 coords
对象,并允许传递额外的美学。
基本上它需要一个函数来创建 grob,然后通过 gggrid::grid_panel
添加到 ggplot。对于 grob,我使用 gridtext::richtext_grob
这样可以很容易地向每个面板添加像文本框这样的条形文本。
library(ggplot2)
library(gggrid)
#> Loading required package: grid
library(gridtext)
set.seed(123)
ID <- rep(c("ABC123", "DEF456", "GHI789", "JKL012"), each = 10)
Vref <- c((runif(10, 1, 2)), (runif(10, 3, 5)), (runif(10, 6, 9)), (runif(10, 0, 2)))
Time <- rep(c(1:10), 4)
df <- data.frame(ID, Vref, Time)
tg <- function(data, coords) {
y_label <- max(coords$y)
gridtext::richtext_grob(data$label[which.max(coords$y)],
x = unit(0, "npc") + unit(.045, "npc"),
y = unit(y_label, "npc") + unit(2, "mm"),
hjust = 0,
vjust = 0,
valign = .5,
padding = unit(rep(4.4, 4), "pt"),
gp = grid::gpar(fontsize = 8, fill = "grey85"),
box_gp = grid::gpar(col = "grey85")
)
}
ggplot(df, aes(x = Time, y = Vref)) +
geom_col() +
scale_y_continuous(expand = expansion(mult = c(.05, .2))) +
facet_wrap(~ID, nrow = 2) +
gggrid::grid_panel(mapping = aes(label = ID), tg) +
theme(strip.text = element_blank())