gpt4 book ai didi

r - 如何在多个多方面ggplot2图形中实现相同的方面大小和比例?

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

我有一系列ggplot2图形,这些图形具有恒定数量的水平但垂直数量不同的垂直构面。我想将图形另存为.a4横向a4格式的图形。

但是,我不知道如何实现相同比例的构面。如果我尝试手动进行调整,并针对不同数量的垂直小平面更改widthheight,则各图之间的比例会有所不同,即得到的点大小和线宽也不同。

本质上,对于具有可变(垂直)构面数量的图,如何获得相同的构面尺寸和比例?

这是一个例子:

df <- expand.grid(a = 1:2, b = 1:5, x = 1:10)
df$y <- df$x
plot <- ggplot(data = df, mapping = aes(x = x, y = y)) +
geom_point()
plot1 <- plot + facet_grid(facets = "a ~ b")
plot2 <- plot + facet_grid(facets = ". ~ b")

ggsave(filename = "./figures/plot1.pdf", plot = plot1,
height = 210, width = 297, units = "mm")

ggsave(filename = "./figures/plot2.pdf", plot = plot2,
height = 210, width = 297, units = "mm")

最佳答案

我使用此代码将面板尺寸设置为绝对值,也许对您有所帮助

set_panel_size <- function(p=NULL, g=ggplotGrob(p), file=NULL, 
margin = unit(1,"mm"),
width=unit(4, "cm"),
height=unit(4, "cm")){

panels <- grep("panel", g$layout$name)
panel_index_w<- unique(g$layout$l[panels])
panel_index_h<- unique(g$layout$t[panels])
nw <- length(panel_index_w)
nh <- length(panel_index_h)

if(getRversion() < "3.3.0"){

# the following conversion is necessary
# because there is no `[<-`.unit method
# so promoting to unit.list allows standard list indexing
g$widths <- grid:::unit.list(g$widths)
g$heights <- grid:::unit.list(g$heights)

g$widths[panel_index_w] <- rep(list(width), nw)
g$heights[panel_index_h] <- rep(list(height), nh)

} else {

g$widths[panel_index_w] <- rep(width, nw)
g$heights[panel_index_h] <- rep(height, nh)

}

if(!is.null(file))
ggsave(file, g,
width = convertWidth(sum(g$widths) + margin,
unitTo = "in", valueOnly = TRUE),
height = convertHeight(sum(g$heights) + margin,
unitTo = "in", valueOnly = TRUE))

invisible(g)
}

print.fixed <- function(x) grid.draw(x)

关于r - 如何在多个多方面ggplot2图形中实现相同的方面大小和比例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30571198/

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