在 R 网格包中,如何使用视口合并 ggplot2 图
In R grid package , how to use viewport for merge ggplot2 plots
我想将 geom_point() 和 geom_boxplot() 合并到一个图中,如附件所示 image.Below 代码不能 work.Anyone 可以帮忙吗?谢谢!
library(grid)
library(ggplot2)
grid.newpage()
vp <- viewport(x=0.5,y=0.5,width = 1,height = 1)
push.Viewport(vp)
ggplot(mtcars) + geom_point(aes(mpg, disp))
vp_sub <- viewport(x=0.5,y=0.7,width=0.3,height=0.3)
push.viewport(vp_sub)
ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
也许您可以使用 patchwork
软件包,其中有一个 section 可以准确描述您的问题。
library(tidyverse)
library(patchwork)
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p1 + inset_element(
p2,
left = 0.5,
bottom = 0.5,
right = unit(1, 'npc') - unit(1, 'cm'),
top = unit(1, 'npc') - unit(1, 'cm')
)
除了 patchwork::inset_element
之外,第二个选项是通过 ggplot2::annotation_custom
添加您的箱线图。但是,与 patchwork::inset_element
相比,您必须在主图的数据范围的绝对坐标中设置位置:
library(ggplot2)
bp <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
base <- ggplot(mtcars) +
geom_point(aes(mpg, disp))
base +
annotation_custom(grob = ggplotGrob(bp), xmin = 22.5, ymin = 250)
使用viewport
你可以这样完成你的任务。如果你想保存在 png 中,那么只需注释掉行 #png("my_plot.png")
library(grid)
library(ggplot2)
grid.newpage()
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
vp <- viewport(x=0.5,y=0.5,width = 1,height = 1)vp_sub <- viewport(x=0.73,y=0.8,width=0.4,height=0.3)
#png("my_plot.png")
print(p1, vp=vp)
print(p2, vp=vp_sub)
dev.off()
我想将 geom_point() 和 geom_boxplot() 合并到一个图中,如附件所示 image.Below 代码不能 work.Anyone 可以帮忙吗?谢谢!
library(grid)
library(ggplot2)
grid.newpage()
vp <- viewport(x=0.5,y=0.5,width = 1,height = 1)
push.Viewport(vp)
ggplot(mtcars) + geom_point(aes(mpg, disp))
vp_sub <- viewport(x=0.5,y=0.7,width=0.3,height=0.3)
push.viewport(vp_sub)
ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
也许您可以使用 patchwork
软件包,其中有一个 section 可以准确描述您的问题。
library(tidyverse)
library(patchwork)
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p1 + inset_element(
p2,
left = 0.5,
bottom = 0.5,
right = unit(1, 'npc') - unit(1, 'cm'),
top = unit(1, 'npc') - unit(1, 'cm')
)
除了 patchwork::inset_element
之外,第二个选项是通过 ggplot2::annotation_custom
添加您的箱线图。但是,与 patchwork::inset_element
相比,您必须在主图的数据范围的绝对坐标中设置位置:
library(ggplot2)
bp <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
base <- ggplot(mtcars) +
geom_point(aes(mpg, disp))
base +
annotation_custom(grob = ggplotGrob(bp), xmin = 22.5, ymin = 250)
使用viewport
你可以这样完成你的任务。如果你想保存在 png 中,那么只需注释掉行 #png("my_plot.png")
library(grid)
library(ggplot2)
grid.newpage()
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
vp <- viewport(x=0.5,y=0.5,width = 1,height = 1)vp_sub <- viewport(x=0.73,y=0.8,width=0.4,height=0.3)
#png("my_plot.png")
print(p1, vp=vp)
print(p2, vp=vp_sub)
dev.off()