我想用ggExtra::ggMarginal
圖創建一個類似刻面的效果。這還
但是一旦我添加了邊際密度,排列看起來像這樣:
如您所見,每個地塊的面板大小不再相等;相反,整個物件都是。我希望第二個圖中每個的面板大小與ggplot
第一個圖中的相同。
嘗試的解決方案:
- 我試圖確定軸相對于面板的寬度和高度,因為這樣我可以使用
widths
andheights
引數來設定-ized 物件wrap_plot
的適當相對大小;ggMarginal
不幸的是,我花了很多時間來挖掘ggplotGrob
輸出,但沒有成功。例如,我使用grid::convertWidth(sum(ggplotGrob(p1)$widths), "in", TRUE)
andgrid::convertWidth(sum(ggplotGrob(p2)$widths), "in", TRUE)
嘗試以英寸為單位計算圖的寬度(p1
有 y 軸,p2
沒有),但結果大不相同:0.87 和 0.19。對我來說,簡單地洗掉軸標題、文本和刻度會大大減少寬度,這對我來說沒有意義。當然,將相對寬度設定為 4.5 和 1 左右不會生成正確的patchwork
繪圖! - 我嘗試使用
patchwork::get_dim
并patchwork::set_dim
手動設定每個子圖的區域(使用patchwork::area
)但無法弄清楚。 - 我也嘗試先創建拼湊,然后將其應用于
ggMarginal
拼湊中的每個情節,但這不起作用。
我將不勝感激有關保證四個圖的面板尺寸相等的建議,理想情況下不依賴于組件的實際尺寸(即,以像素為單位)。ggMarginal
看到允許刻面并看到patchwork
超出簡單ggplot
物件的范圍真是太棒了!
b <- ggplot(mtcars, aes(x = disp, y = mpg))
geom_point()
labs(x = "some\nlines",
y = "many\nnew\nlines")
p1 <- b
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank())
p1m <- ggExtra::ggMarginal(p1, margins = "y")
p2 <- b
theme(axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank())
p2m <- ggExtra::ggMarginal(p2, margins = "y")
p3 <- b
p3m <- ggExtra::ggMarginal(p3, margins = "y")
p4 <- b
theme(axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank())
p4m <- ggExtra::ggMarginal(p4, margins = "y")
patchwork::wrap_plots(p1, p2, p3, p4, nrow = 2) # this looks great!
patchwork::wrap_plots(p1m, p2m, p3m, p4m, nrow = 2) # this doesn't :(
uj5u.com熱心網友回復:
而不是依賴ggMarginal
一個選項,而是手動創建密度圖并將主圖和密度圖粘合在一起patchwork
:
library(ggplot2)
library(patchwork)
dp <- ggplot(mtcars, aes(y = mpg))
geom_density()
theme_void()
list(p1, dp, p2, dp, p3, dp, p4, dp) |>
wrap_plots(nrow = 2, widths = c(5, 1, 5, 1))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/485240.html