gpt4 book ai didi

r - 在 ggplot 中指定 grid.layout 以在 2x2 图中粘贴 4 个图

转载 作者:行者123 更新时间:2023-12-02 03:25:40 25 4
gpt4 key购买 nike

我无法在 ggplot 中指定网格布局尺寸,以便在 2x2 图中粘贴四个图(2 列,2 行)。我有一个 R 代码,将前 2 个图粘贴在一行中,将第 3 和第 4 个图粘贴在不同的行中(总共 3 行),如下图所示。 output of the R code .该图是使用这个简单的 R 代码示例生成的:

setwd("...")
library(ggplot2)
library(grid)
x1 <- c(seq(1,20,1))
y1 <- c(seq(50,69,1))

df <- data.frame(x1,y1)
df$DOSE[df$x1<= 10] <- "50 mg"
df$DOSE[df$x1 > 10] <- "100 mg"


filename <- "test_plot.png"
png(filename, width=700, height=900, pointsize=14)

#4 ggplot2 graphs in a grid layout
vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)
grid.newpage()
pushViewport(viewport(layout = grid.layout(4,4)))

#Plot 1
plotobj1 <- NULL
plotobj1 <- ggplot(data=df)
plotobj1 <- plotobj1 + geom_point(aes(x=x1, y=y1,colour=DOSE), shape=1, size=3)
plotobj1 <- plotobj1 + theme(legend.position="none")
print(plotobj1, vp=vplayout(1:2,1:2))
#Plot 2
plotobj2 <- NULL
plotobj2 <- ggplot(df)
plotobj2 <- plotobj2 + geom_point(aes(x=x1, y=y1,colour=DOSE), shape=1, size=3)
plotobj2 <- plotobj2 + theme(legend.position="none")
print(plotobj2, vp=vplayout(1:2,3:4))
#Plot 3
plotobj3 <- NULL
plotobj3 <- ggplot(df)
plotobj3 <- plotobj3 + geom_point(aes(x=x1, y=y1, colour=DOSE), shape=1, size=3)
plotobj3 <- plotobj3 + scale_colour_brewer(name="Dose", palette="Set1")
print(plotobj3, vp=vplayout(3,2:4))
#Plot 4 CWRES vs PRED
plotobj4 <- NULL
plotobj4 <- ggplot(df)
plotobj4 <- plotobj4 + geom_point(aes(x=x1, y=y1, colour=DOSE), shape=1, size=3)
plotobj4 <- plotobj4 + scale_colour_brewer(name="Dose", palette="Set1")
print(plotobj4, vp=vplayout(4,2:4))

dev.off()

我在修改尺寸和绘图位置时遇到了问题。我想将第 3 和第 4 个图排成一行(类似于前两个图),所以我有一个较小的图可以发布。

最佳答案

虽然您也可以使用上面提到的 grid.arrange 和来自 cookbook-r.com 的 multiplot 函数,但您的代码也可以工作。然而,你通过指定一个 4 x 4 的网格给自己制造了困难,而你所需要的只是一个 2 x 2 的网格。顺便说一句:你不需要先创建一个 NULL 对象,所以我已经删除了那些行。

library(ggplot2)
library(grid)
x1 <- c(seq(1,20,1))
y1 <- c(seq(50,69,1))
df <- data.frame(x1,y1)
df$DOSE[df$x1<= 10] <- "50 mg"
df$DOSE[df$x1 > 10] <- "100 mg"

filename <- "test_plot.png"
png(filename, width=700, height=900, pointsize=14)

#4 ggplot2 graphs in a grid layout
vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)
grid.newpage()
pushViewport(viewport(layout = grid.layout(2,2)))

#Plot 1
plotobj1 <- ggplot(data=df)
plotobj1 <- plotobj1 + geom_point(aes(x=x1, y=y1,colour=DOSE), shape=1, size=3)
plotobj1 <- plotobj1 + theme(legend.position="none")
print(plotobj1, vp=vplayout(1,1))
#Plot 2
plotobj2 <- ggplot(df)
plotobj2 <- plotobj2 + geom_point(aes(x=x1, y=y1,colour=DOSE), shape=1, size=3)
plotobj2 <- plotobj2 + theme(legend.position="none")
print(plotobj2, vp=vplayout(1,2))
#Plot 3
plotobj3 <- ggplot(df)
plotobj3 <- plotobj3 + geom_point(aes(x=x1, y=y1, colour=DOSE), shape=1, size=3)
plotobj3 <- plotobj3 + scale_colour_brewer(name="Dose", palette="Set1")
print(plotobj3, vp=vplayout(2,1))
#Plot 4 CWRES vs PRED
plotobj4 <- ggplot(df)
plotobj4 <- plotobj4 + geom_point(aes(x=x1, y=y1, colour=DOSE), shape=1, size=3)
plotobj4 <- plotobj4 + scale_colour_brewer(name="Dose", palette="Set1")
print(plotobj4, vp=vplayout(2,2))

dev.off()

A 2x2 layout

关于r - 在 ggplot 中指定 grid.layout 以在 2x2 图中粘贴 4 个图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519043/

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