如何对齐直方图和箱线图以便它们共享 x 轴?

How do I align a histogram and boxplot so that they share x-axis?

数据

 wages
# A tibble: 1,472 x 3
    wage educ  exper
   <dbl> <fct> <dbl>
 1  7.78 1        23
 2  4.82 1        15
 3 10.6  1        31
 4  7.04 1        32
 5  7.89 1         9
 6  8.20 1        15
 7  8.21 1        26
 8 10.4  1        23
 9 11.0  1        13
10  7.21 1        22
# ... with 1,462 more rows  

对齐直方图和箱线图

我正在尝试使用 cowplot 包对齐 wage 列的直方图和箱线图。我希望他们共享 x 轴,但值有点偏差。请参阅下面的代表:

library(tidyverse)
library(cowplot)

wages <- read_csv("http://vincentarelbundock.github.io/Rdatasets/csv/Ecdat/Bwages.csv") %>% 
  select(-X1, -sex) %>% 
  mutate(educ = factor(educ)) 
#> Warning: Missing column names filled in: 'X1' [1]
#> 
#> -- Column specification --------------------------------------------------------
#> cols(
#>   X1 = col_double(),
#>   wage = col_double(),
#>   educ = col_double(),
#>   exper = col_double(),
#>   sex = col_logical()
#> )


p1 <- ggplot(wages) +
  geom_histogram(aes(x = wage)) +
  geom_vline(xintercept = median(wages$wage), color = "red")

p2 <- ggplot(wages) + 
  geom_boxplot(aes(x = wage)) 

plot_grid(p1, p2, ncol = 1, axis = "l", align = 'v')
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

reprex package (v1.0.0)

于 2021 年 2 月 27 日创建

如何让它们完美共享x轴?

只需在每个 ggplot 调用中添加 xlim(0,50)

您不仅应该设置限制,还应该设置扩展范围(到 none)和中断:

p1 <- p1 +
  scale_x_continuous(limits= c(0,50), expand = c(0, 0), breaks = c(0,10,20,30,40,50))
p2 <- p2+
  scale_x_continuous(limits= c(0,50), expand = c(0, 0), breaks = c(0,10,20,30,40,50))

plot_grid(p1, p2, ncol = 1, axis = "l", align = 'v')