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 - 本地 block 纵横比为 1 时,将地 block 与拼凑而成

r - 在 sqldf 中识别 Inf

regex - 直到下一个空格的条件的正则表达式

r - R 语言中的 plot 函数不考虑绘图类型

r - 使用 ggplot 在一页上绘制多个图

r - 使用guide_area时,图例与拼凑而成的图重叠

r - 使用 write.csv (base R) 保留数字作为字符字段

r - 如何在不构建新数据框的情况下使用 R 中的 ggplot2 绘制来自不同数据框的两个系列?

r - 将列名传递给函数

r - 拼凑中色标的水平对齐