r - 组合ggplot2对象时在拼凑中设置轴限制

标签 r ggplot2 patchwork

合并时ggplot2对象使用 patchwork我希望能够有一个选项,我可以轻松地为所有图设置一个选项,使其具有相同的 x 轴和/或 y 轴范围。

代表:

library(patchwork)
library(ggplot2)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

p1 <- mtcars %>% 
  ggplot() + 
  geom_point(aes(mpg, disp)) + 
  ggtitle('Plot 1')

p2 <- mtcars %>% 
  filter(disp < 300) %>% 
  ggplot() + 
  geom_point(aes(mpg, disp)) + 
  ggtitle('Plot 2')

p1 + p2



创建于 2020-02-01 由 reprex package (v0.3.0)

预期结果将其设置为在两个图中具有相同范围的两个轴:

library(patchwork)
library(ggplot2)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

p1 <- mtcars %>% 
  ggplot() + 
  geom_point(aes(mpg, disp)) + 
  ggtitle('Plot 1')

p2 <- mtcars %>% 
  filter(disp < 300) %>% 
  ggplot() + 
  geom_point(aes(mpg, disp)) + 
  ggtitle('Plot 2') +
  xlim(ggplot_build(p1)$layout$panel_scales_x[[1]]$range$range) +
  ylim(ggplot_build(p1)$layout$panel_scales_y[[1]]$range$range)

p1 + p2



创建于 2020-02-01 由 reprex package (v0.3.0)

有没有人有任何想法?

最佳答案

好吧,我很抱歉回答我自己的问题,但我刚刚找到了解决方案..

这可以通过使用 & 很好地实现。 ,它将函数应用于拼凑对象中的所有图。

1)reprex:

library(patchwork)
library(ggplot2)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

p1 <- mtcars %>% 
  ggplot() + 
  geom_point(aes(mpg, disp)) + 
  ggtitle('Plot 1')

p2 <- mtcars %>% 
  filter(disp < 300) %>% 
  ggplot() + 
  geom_point(aes(mpg, disp)) + 
  ggtitle('Plot 2')

p_combined <- p1 + p2

p_combined



创建于 2020-02-01 由 reprex package (v0.3.0)

2) 从范围中获取最小值和最大值:

p_ranges_x <- c(ggplot_build(p_combined[[1]])$layout$panel_scales_x[[1]]$range$range,
  ggplot_build(p_combined[[2]])$layout$panel_scales_x[[1]]$range$range)

p_ranges_y <- c(ggplot_build(p_combined[[1]])$layout$panel_scales_y[[1]]$range$range,
                ggplot_build(p_combined[[2]])$layout$panel_scales_y[[1]]$range$range)

3) 将这些范围应用于拼凑对象:

p_combined & 
  xlim(min(p_ranges_x), max(p_ranges_x)) & 
  ylim(min(p_ranges_y), max(p_ranges_y))



创建于 2020-02-01 由 reprex package (v0.3.0)

关于r - 组合ggplot2对象时在拼凑中设置轴限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60016390/

相关文章:

r - 创建周末虚拟变量

r - 如何从数据框列表中附加列?

r - data.frame 行以列出命名元素

r - 让 R 等待控制台输入?

将 stat_ellipse 限制为某些数据点

r - Patchwork 无法识别具有 ggMargnial 分布元素的图

r - 在 x 轴刻度值上对齐不同宽度的图

r - 与 gplots 的气球图等效的 ggplot2 替代品?

r - 在 ggplot2 中使用带有 stat_function 的图例

r - 指定拼凑中收集的图例的具体位置