gpt4 book ai didi

r - 使用 ggplot2 中子图的自定义 x,y 位置创建子图(构面)

转载 作者:行者123 更新时间:2023-12-04 10:10:24 25 4
gpt4 key购买 nike

我们如何在 ggplot2 中自定义面板/子图的位置?

具体来说,我有一个分组的时间序列,我想为每个时间序列生成 1 个子图,其中包含子图的自定义位置,不一定在网格中。
facet_grid()facet_wrap()函数不提供面板位置的完全自定义,因为它使用网格。

library(tidyverse)

df = data.frame(group = LETTERS[1:5],
x = c(1,2,3,1.5,2.5),
y =c(2,1,2,3,3),
stringsAsFactors = F)%>%
group_by(group)%>%
expand_grid(time = 1:20)%>%
ungroup()%>%
mutate(dv = rnorm(n()))%>%
arrange(group,time)

## plot in grid
df%>%
ggplot()+
geom_line(aes(x=time,y=dv))+
facet_grid(~group)

## plot with custom x, y position
## Is there an equivalent of facet_custom()?
df%>%
ggplot()+
geom_line(aes(x=time,y=dv))+
facet_custom(~group, x.subplot = x, y.subplot = y)

仅供引用:这个数据集只是一个例子。我的数据是脑电图数据,其中每组代表一个电极(最多 64 个),我想根据电极在头部的位置绘制每个电极的脑电图信号。

最佳答案

好吧,我想这不再是真正的“分面图”了。因此,我认为那里没有特定的功能。

但是你可以使用神奇的patchwork包,特别是 wrap_plots 中的布局选项.

正如主要包作者 Thomas 在小插图中所描述的,以下选项使用 area()可能有点冗长,但它会为您提供有关定位所有图的完整编程选项。

library(tidyverse)
library(patchwork)

mydf <- data.frame(
group = LETTERS[1:5],
x = c(1, 2, 3, 1.5, 2.5),
y = c(2, 1, 2, 3, 3),
stringsAsFactors = F
) %>%
group_by(group) %>%
expand_grid(time = 1:20) %>%
ungroup() %>%
mutate(dv = rnorm(n())) %>%
arrange(group, time)

## plot in grid
mylist <-
mydf %>%
split(., .$group)

p_list <-
map(1:length(mylist), function(i){
ggplot(mylist[[i]]) +
geom_line(aes(x = time, y = dv)) +
ggtitle(names(mylist)[i])
}
)

layout <- c(
area(t = 1, l = 1, b = 2, r = 2),
area(t = 2, l = 3, b = 3, r = 4),
area(t = 3, l = 5, b = 4, r = 6),
area(t = 4, l = 3, b = 5, r = 4),
area(t = 5, l = 1, b = 6, r = 2)
)

wrap_plots(p_list, design = layout)
#> result not shown, it's the same as below

对于更具编程性的方法,一种选择是手动创建所需的“patch_area”对象。

t = 1:5
b = t+1
l = c(1,3,5,3,1)
r = l+1

list_area <- list(t = t, b = b, l = l, r = r)

class(list_area) <- "patch_area"

wrap_plots(p_list, design = list_area)



创建于 2020-04-22 由 reprex package (v0.3.0)

关于r - 使用 ggplot2 中子图的自定义 x,y 位置创建子图(构面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61360027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com