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 中的当前观察值

svn - 在 R pdf 输出中抑制或设置 CreationDate/ModDate

r - 如何计算R中多维颜色的渐变

r - 如何在具有不同数据帧的 ggplot 中创建线型图例

r - 将多图 ggplots 与拼凑图和单个图例对齐

r - 如何在 R 中的网格上的特定位置排列图?

r - 使用 R,从网络导入数据

如果任何连续值不符合阈值,则删除 ID

r - 在 ggplot2 中,如何制作跨因素比例的条形图(并添加误差线)?

r - 如何在拼凑而成的图形中调整带有plot_annotation标签的字体样式?