여러 r 플롯이 동일한 길이의 x 눈금을 갖도록 강제하는 방법은 무엇입니까? [복제]

Nov 26 2020

R에서 여러 패키지는 다음과 같은 그리드에 대해 여러 개의 플롯을 배치 할 수 있습니다 gridExtracowplot. 동일한 행 / 열의 플롯은 기본적으로 경계에 정렬됩니다. 다음은 그 예입니다. 3 개의 히스토그램이 동일한 플롯에 수직으로 배열됩니다. x 눈금이 지정되지 않았으므로 그리드 플롯이 약간보기 흉해 보입니다.

library(ggplot2);library(grid);library(cowplot)

p1 <- ggplot(data = NULL, aes(x = rt(10,19))) + 
  geom_histogram(bins = 5, fill = "darkgreen", color = "darkgrey", alpha = 0.6) +
  labs(y = "", x = "")
# similar plots for p2, p3

plot_grid(p1, textGrob("N=10"),
             p2, textGrob("N=100"),
             p3, textGrob("N=10000"),
             nrow=3, rel_widths = c(4/5, 1/5))

문제는 도구 음모를 꾸미고 있다는 것입니다 baseggplot2X-진드기의 길이가 해결되지 것이고, cowplot::plot_grid단지 자동으로하면 최대 폭으로 플롯을 뻗어. 일부 플롯에는 더 넓은 y- 라벨이 있으므로 더 짧은 x- 틱으로 끝납니다.

이제 세 개의 히스토그램이 동일한 길이의 x- 틱을 갖도록 강제하고 싶습니다. 이런 종류의 문제에 대한 방법 / 패키지가 있는지 알고 싶습니다. 일반적으로 데이터 재구성과 같은 기능을 결합 ggplot2::facet_wrap하면이 문제를 해결할 수 있지만 더 직접적인 해결책이 있는지 궁금합니다.

답변

2 teunbrand Nov 26 2020 at 14:33

개인적으로 패치 워크가 플롯의 정렬을 우아하게 처리하고 공통 스케일의 한계를 설정하여 플롯이 x 축을 공유하도록 할 수 있다고 생각합니다.

library(ggplot2)
library(patchwork)

set.seed(123)

plots <- lapply(c(10, 100, 1000), function(n) {
  ggplot(mapping = aes(x = rt(n, 19))) +
    geom_histogram(bins = round(sqrt(n)) * 2,
                   fill = "darkgreen", colour = "darkgrey",
                   alpha = 0.6) +
    labs(y = "", x = "")
})

plots[[1]] / plots[[2]] / plots[[3]] &
  scale_x_continuous(limits = c(-5, 5),
                     oob = scales::oob_squish)

reprex 패키지 (v0.3.0)에 의해 2020-11-26에 생성됨

1 ClausWilke Nov 27 2020 at 06:53

plot_grid()함수는 플롯을 정렬 할 수 있습니다. 여기를 참조하십시오.https://wilkelab.org/cowplot/articles/aligning_plots.html

library(ggplot2)
library(grid)
library(cowplot)

set.seed(123)

plots <- lapply(c(10, 100, 1000), function(n) {
  ggplot(mapping = aes(x = rt(n, 19))) +
    geom_histogram(bins = round(sqrt(n)) * 2,
                   fill = "darkgreen", colour = "darkgrey",
                   alpha = 0.6) +
    labs(y = "", x = "") +
    scale_x_continuous(
      limits = c(-5, 5),
      oob = scales::oob_squish
    )
})

plot_grid(
  plots[[1]], textGrob("N=10"),
  plots[[2]], textGrob("N=100"),
  plots[[3]], textGrob("N=10000"),
  nrow=3, rel_widths = c(4/5, 1/5), align = "v", axis = "l"
)

reprex 패키지 (v0.3.0)에 의해 2020-11-26에 생성됨