【问题标题】:Marginal plots using axis_canvas in cowplot: How to insert gap between main panel and marginal plots在cowplot中使用axis_canvas的边际图:如何在主面板和边际图之间插入间隙
【发布时间】:2018-05-12 13:48:58
【问题描述】:

this post:的评论中出现了以下内容在cowplot中使用axis_canvas()函数制作边缘图时,我们如何在主图和边缘图之间创建间隙?

示例代码:

require(cowplot)

pmain <- ggplot(data = mpg, aes(x = cty, y = hwy, color = factor(cyl))) + 
  geom_point() + 
  xlab("City driving (miles/gallon)") +
  ylab("Highway driving (miles/gallon)") +
  theme_minimal()

xbox <- axis_canvas(pmain, axis = "x", coord_flip = TRUE) + 
  geom_boxplot(data = mpg, aes(y = cty, x = factor(cyl), color = factor(cyl))) + 
  scale_x_discrete() + coord_flip()
ybox <- axis_canvas(pmain, axis = "y") + 
  geom_boxplot(data = mpg, aes(y = hwy, x = factor(cyl), color = factor(cyl))) +
  scale_x_discrete()

p1 <- insert_xaxis_grob(pmain, xbox, grid::unit(0.6, "in"), position = "top")
p2 <- insert_yaxis_grob(p1, ybox, grid::unit(0.6, "in"), position = "right")
ggdraw(p2)

正如我们在这个例子中看到的,边缘箱线图直接接触到主绘图面板。目标是产生一些差距。如何做到这一点?

【问题讨论】:

    标签: r ggplot2 cowplot


    【解决方案1】:

    我看到两个选项:

    插入空白图

    我们可以迭代地应用 insert_xaxis_grob() / insert_yaxis_grob() 函数来插入多个 grobs,其中一个可以为空。通过这种方式,我们可以在边缘图的任一侧插入指定数量的空间。在这里,我将展示如何在内部执行此操作,以在主面板和边缘图之间产生间隙:

    # pmain, xbox, ybox are defined as in the question
    pnull <- ggdraw() # generate empty plot
    
    p1 <- insert_xaxis_grob(
            insert_xaxis_grob(pmain, xbox, grid::unit(0.6, "in"), position = "top"),
            pnull, grid::unit(0.2, "in"), position = "top")
    
    p2 <- insert_yaxis_grob(
            insert_yaxis_grob(p1, ybox, grid::unit(0.6, "in"), position = "right"),
            pnull, grid::unit(0.2, "in"), position = "right")
    ggdraw(p2)
    

    在边际图中创建间隙

    另外,由于边缘图是用 ggplot2 绘制的,我们可以只指定在适当位置生成空间的轴限制。即,我们通过以下方式定义xbox2ybox2,而不是原始代码中的xboxybox

    xbox2 <- axis_canvas(pmain, axis = "x", coord_flip = TRUE) + 
      geom_boxplot(data = mpg, aes(y = cty, x = as.numeric(factor(cyl)), color = factor(cyl))) + 
      scale_x_continuous(limits = c(-2, 4.5)) + coord_flip()
    ybox2 <- axis_canvas(pmain, axis = "y") + 
      geom_boxplot(data = mpg, aes(y = hwy, x = as.numeric(factor(cyl)), color = factor(cyl))) +
      scale_x_continuous(limits = c(-2, 4.5))
    
    p1 <- insert_xaxis_grob(pmain, xbox2, grid::unit(0.8, "in"), position = "top")
    p2 <- insert_yaxis_grob(p1, ybox2, grid::unit(0.8, "in"), position = "right")
    ggdraw(p2)
    

    要了解这里发生了什么,让我们并排比较 xboxxbox2

    plot_grid(xbox + panel_border("black"), 
              xbox2 + panel_border("black"), nrow = 1, scale = 0.9)
    

    我们看到xbox2(右侧)在底部有额外的空间,这是通过将轴从 -2 开始创建的,即使第一个箱形图位于位置 1。有关如何选择的更多信息这些边缘图的轴范围可以在here.

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 2014-06-22
      • 2019-02-01
      • 1970-01-01
      • 2022-01-10
      • 2016-07-10
      相关资源
      最近更新 更多