試圖用ggMarginal顯示 2 個圖,但這些圖不被識別。
我正在粘貼以下代碼的簡化版本:
- 在添加 ggMarginal 元素之前Patchwork 按預期并排顯示 ggplots
- 使用 ggMarginal 添加邊緣分布后,Patchwork 似乎不再識別該圖。我得到的錯誤訊息如下:
p1m p2m
#> Error in p1m p2m: non-numeric argument to binary operator
這是我正在運行的代碼:
library(ggplot2)
library(ggExtra)
library(patchwork)
p1 <- ggplot(mtcars)
geom_point(aes(mpg, disp))
ggtitle('Plot 1')
p1m <- ggMarginal(p1,
type = "density",
size = 3)
p2 <- ggplot(mtcars)
geom_point(aes(hp, wt, colour = mpg))
ggtitle('Plot 3')
p2m <- ggMarginal(p2,
type = "density",
size = 3)
p1 p2
p1m p2m
#> Error in p1m p2m: non-numeric argument to binary operator
非常感謝你的幫助!
由reprex 包(v2.0.1)于 2021 年 10 月 9 日創建
uj5u.com熱心網友回復:
不確定是否有一個簡單的選擇來patchwork處理 class 的物件ggMarginal。
添加側圖的另一種選擇是使用ggside與patchwork. 的一個缺點ggside是(據我所知)截至目前,它不提供任何選項來設定副圖的樣式,即它將繼承主圖的樣式theme:
library(ggplot2)
library(ggside)
#> Registered S3 method overwritten by 'ggside':
#> method from
#> .gg ggplot2
library(patchwork)
p1 <- ggplot(mtcars, aes(mpg, disp))
geom_point()
geom_xsidedensity(aes(y = after_stat(density)), position = "stack")
geom_ysidedensity(aes(x = after_stat(density)), position = "stack")
ggtitle('Plot 1')
theme(ggside.panel.scale = .5)
p2 <- ggplot(mtcars, aes(hp, wt, colour = mpg))
geom_point()
geom_xsidedensity(aes(y = after_stat(density)), position = "stack")
geom_ysidedensity(aes(x = after_stat(density)), position = "stack")
ggtitle('Plot 3')
theme(ggside.panel.scale = .5,)
p1 p2

第二個但很麻煩的選擇是通過ggplot2太制作邊緣圖并使用patchwork以下方法將它們粘合在一起:
p1 <- ggplot(mtcars)
geom_point(aes(mpg, disp))
ggtitle('Plot 1')
p2 <- ggplot(mtcars)
geom_point(aes(mpg, disp, colour = mpg))
ggtitle('Plot 3')
p1ma <- ggplot(mtcars)
geom_density(aes(mpg))
theme_void()
p1mb <- ggplot(mtcars)
geom_density(aes(y = disp))
theme_void()
wrap_plots(list(p1ma, plot_spacer(), p1ma, plot_spacer(), p1, p1mb, p2, p1mb),
widths = c(2, 1, 2, 1), heights = c(1, 2),
ncol = 4, nrow = 2, byrow = TRUE) &
theme(legend.position = "bottom")

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