facet_wrap()因沒有space = "free"爭論而被認可(
使用以下代碼創建上圖:
library(tidyverse)
p <-
mtcars %>%
rownames_to_column() %>%
ggplot(aes(x = disp, y = rowname)) geom_point()
facet_wrap(~ carb, ncol = 1, scales = "free_y")
facet_grid另一方面有一個space = "free"論點。允許很好的 y 軸間距。

使用以下代碼創建上圖:
p <-
mtcars %>%
rownames_to_column() %>%
ggplot(aes(x = disp, y = rowname)) geom_point()
facet_grid(carb ~ ., scales = "free_y", space = "free_y")
問題在于標簽在側面,而不是頂部。有時我的刻面標簽更長,刻面中的行很少。這意味著刻面標簽被切斷。
有一個解決方案 力量包(由 ilarischeinin 在https://github.com/tidyverse/ggplot2/issues/2933上發表評論)。
p <-
mtcars %>%
rownames_to_column() %>%
ggplot(aes(x = disp, y = rowname)) geom_point()
p ggforce::facet_col(vars(carb), scales = "free_y", space = "free")
但是,有限制離開 ggplot2. 例如,我最終想要一個兩列圖,而這個功能似乎不可能力量. 有什么方法可以產生相同的結果,facet_wrap()以便我可以利用這個ncol()論點?
uj5u.com熱心網友回復:
這是基于https://stackoverflow.com/a/29022188/12957340的潛在解決方法:
library(tidyverse)
library(gtable)
library(grid)
p1 <- mtcars %>%
rownames_to_column() %>%
ggplot(aes(x = disp, y = rowname)) geom_point()
facet_grid(carb ~ ., scales = "free_y", space = "free_y")
theme(panel.spacing = unit(1, 'lines'),
strip.text.y = element_text(angle = 0))
gt <- ggplotGrob(p1)
panels <-c(subset(gt$layout, grepl("panel", gt$layout$name), se=t:r))
for(i in rev(panels$t-1)) {
gt = gtable_add_rows(gt, unit(0.5, "lines"), i)
}
panels <-c(subset(gt$layout, grepl("panel", gt$layout$name), se=t:r))
strips <- c(subset(gt$layout, grepl("strip-r", gt$layout$name), se=t:r))
stripText = gtable_filter(gt, "strip-r")
for(i in 1:length(strips$t)) {
gt = gtable_add_grob(gt, stripText$grobs[[i]]$grobs[[1]], t=panels$t[i]-1, l=5)
}
gt = gt[,-6]
for(i in panels$t) {
gt$heights[i-1] = unit(0.8, "lines")
gt$heights[i-2] = unit(0.2, "lines")
}
grid.newpage()
grid.draw(gt)

由reprex 包(v2.0.1)于 2021 年 12 月 15 日創建
我不清楚你所說的“我最終想要一個兩列數字”是什么意思,但如果你能想出一個例子來說明你的“最終”預期結果,我可以嘗試調整這種方法,看看它是否有效或不是。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/384682.html
上一篇:ggplot2缺少y軸標簽
