【问题标题】:Patchwork doesn't recognize plots with ggMargnial distribution elementsPatchwork 无法识别带有 ggMargnial 分布元素的图
【发布时间】:2021-11-29 02:39:05
【问题描述】:

尝试使用 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 package (v2.0.1) 于 2021-10-09 创建

【问题讨论】:

    标签: r ggplot2 patchwork


    【解决方案1】:

    不确定是否有一个简单的选项可以使patchworkggMarginal 类的对象一起工作。

    添加边图的另一种选择是使用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")
    

    【讨论】:

    • 您好! dev branch of ggside 目前支持除主面板外的侧面板主题样式。只是想如果它对 OP 很重要,我会把它放在那里
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多