添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
爱搭讪的消炎药  ·  What am I missing ...·  1 月前    · 
坚强的青蛙  ·  Ssl error: ...·  4 月前    · 
儒雅的打火机  ·  Fitbit Charge ...·  1 年前    · 

解决方法

搜索一轮,发现可以使用 ggforce::facet_row() 函数可以解决。以下用 diamonds 数据集展示一下。

1
2
3
4
5
library(ggplot2)
library(ggforce)
library(dplyr)

str(diamonds)
## tibble [53,940 x 10] (S3: tbl_df/tbl/data.frame)
##  $ carat  : num [1:53940] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
##  $ cut    : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
##  $ color  : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
##  $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
##  $ depth  : num [1:53940] 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
##  $ table  : num [1:53940] 55 61 65 58 58 57 57 55 61 61 ...
##  $ price  : int [1:53940] 326 326 327 334 335 336 336 337 337 338 ...
##  $ x      : num [1:53940] 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
##  $ y      : num [1:53940] 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
##  $ z      : num [1:53940] 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...

我们手动挑选各个 color 中的个别 cut 数据出来。使用 facet_grid 进行分面。

1
2
3
4
5
6
7
8
9
df1 <- subset(diamonds, color == "D" & cut != "Good")
df2 <- subset(diamonds, color == "E" & cut == "Ideal")
df3 <- subset(diamonds, color == "F")

rbind(df1, df2, df3) %>%
ggplot(aes(x=cut, y=price, fill=cut)) +
geom_boxplot() +
facet_grid(~color, scales = "free_x") +
theme_bw()

可以发现不同分面中的box大小是不一样的。我们可以下面的代码自动调整各个分面的box大小。

1
2
3
4
5
rbind(df1, df2, df3) %>% 
ggplot(aes(x=cut, y=price, fill=cut)) +
geom_boxplot() +
facet_row(~color, scales = "free_x", space = "free") +
theme_bw()

Ref
https://stackoverflow.com/questions/52341385/how-to-automatically-adjust-the-width-of-each-facet-for-facet-wrap