R语言 自动将轴限制设置为最小可能边界,显示所有网格排列图

py49o6xq  于 2023-03-27  发布在  其他
关注(0)|答案(2)|浏览(125)

我在R中使用grid.arrange绘制多个图。所有的图都是相似的,所以我希望它们具有相似的比例以便于比较。是否有一个通用命令可以用于为scale_y_continuous选择最窄的limits,其中包括所有的图(预测和置信区间的上/下限)?
如果图不能全部具有相同的比例,是否有通用命令,使得至少所有图可以具有其各自的最窄的边界。
例如,给定以下图:

library(fixest)
library(marginaleffects)
library(ggplot2)
library(gridExtra)
library(grid)

mod1 <- feols(hp ~ vs * am | carb, data = mtcars)

# extract raw data for plotting
dat1 <- plot_slopes(mod1, variables = "vs", condition = "am", draw = FALSE)

# convert categorical (binary/factor) variable to numeric
dat1$am <- as.numeric(as.character(dat1$am))

plot1 <- ggplot(dat1, aes(x = am, y = estimate, ymin = conf.low, ymax = conf.high)) +
    geom_line() +
    geom_ribbon(alpha = .2) +
    theme_minimal() +
    labs(y = "Slopes")

mod2 <- feols(hp ~ vs * am + mpg | carb, data = mtcars)

# extract raw data for plotting
dat2 <- plot_slopes(mod2, variables = "vs", condition = "am", draw = FALSE)

# convert categorical (binary/factor) variable to numeric
dat2$am <- as.numeric(as.character(dat2$am))

plot2 <- ggplot(dat2, aes(x = am, y = estimate, ymin = conf.low, ymax = conf.high)) +
    geom_line() +
    geom_ribbon(alpha = .2) +
    theme_minimal() +
    labs(y = "Slopes")

 grid.arrange(plot1,plot2)

如何选择最窄的可能scale_y_continous,以适合两个图的预测及其阴影置信区间的下限和上限?如果不能对两个图使用相同的标度,可以使用各自的最窄标度吗?我想对许多图都这样做,所以自动化过程是理想的。

bqucvtff

bqucvtff1#

您可以使用layer_scales从图中获取现有范围,因此我们可以

newlims <- range(c(layer_scales(plot1)$y$range$range, 
                   layer_scales(plot2)$y$range$range))

grid.arrange(plot1 + ylim(newlims), plot2 + ylim(newlims))

mklgxw1f

mklgxw1f2#

您应该能够使用scale_y_continous(limits = c(lower, upper), breaks =c(lower, middle, middle_2, _upper)).使所有图具有相同的比例
您可以设置相同的下限和上限,并使图形在相同比例下保持可比性。
不过,我的直觉是,您要问的是“* scale_y_continuous中是否有一个命令可以自动选择最低和最高可能的界限?*”
我的理解是,这个问题的答案是否定的,但您可以手动识别具有最低/最高边界的图形,并为所有后续图形输入该值。

相关问题