我正在嘗試使用 patchwork 包將一些圖組合成一個圖,但我不熟悉它,并且無法弄清楚如何正確縮放圖的大小。有一個核心圖,散點圖,然后是每個連續變數到某些分布的箱線圖。下面是一個可重現的示例:
library(dplyr)
library(ggplot2)
library(patchwork)
set.seed(100)
dat1 <- tibble(x = runif(1000, 0, 10),
y = runif(1000, 0, 20),
group1 = sample(rep(letters[1:5], each = 200)),
group2 = sample(rep(letters[-22:-1], each = 250)))
plot1 <- ggplot(data = dat1)
geom_point(aes(x = x, y = y, color = group1))
facet_wrap(~group2)
theme(legend.position = 'bottom')
xbox <- ggplot(data = dat1)
geom_boxplot(aes(x = x, y = group1, fill = group1, color = group1))
scale_x_continuous(position = 'top')
theme(legend.position = 'none',
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
title = element_blank())
ybox <- ggplot(data = dat1)
geom_boxplot(aes(x = group1, y = y, fill = group1, color = group1))
scale_y_continuous(position = 'right')
theme(legend.position = 'none',
axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
title = element_blank())
(xbox plot_spacer()) / (plot1 ybox)

這與我正在嘗試的很接近,但是需要重新調整箱線圖,以便頂部的大約是其顯示高度的 20%,右邊的大約是其顯示寬度的 20%。我嘗試使用patchwork::plot_layout來處理縮放,但我不斷得到意想不到的結果。我插入了patchwork::plot_spacer()這樣右邊的箱線圖就不會拉伸圖片的整個高度,但也許有更好的方法來做到這一點。箱線圖應該看起來更像軸,所以右上角的空白不應該真的存在。
uj5u.com熱心網友回復:
我不確定你會得到一個在邊緣有推論意義的圖,但是你可以plot_layout使用heightsandwidths引數或design引數來改變邊緣圖的寬度和高度。請注意,括號中的圖本身被視為“子圖”,并在使用plot_layout. 因此,我將所有圖加在一起,而不是使用其他拼湊運算子來排列它們。
xbox plot_spacer() plot1 ybox plot_layout(design = c(area(t = 1, b = 1, l = 1, r = 6), # <== top column
area(t = 1, b = 1, l = 7, r = 7), # <== top right
area(t = 2, b = 7, l = 1, r = 6), # <== bottom left
area(t = 2, b = 7, l = 7, r = 7) # <== bottom right
))
# Alternative:
xbox plot_spacer() plot1 ybox plot_layout(ncol = 2, nrow = 2,
heights = c(1, 6),
widths = c(6, 1))

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/395363.html
