【问题标题】:Adding plots in between faceted plots with ggplot使用 ggplot 在多面图之间添加图
【发布时间】:2018-10-15 08:24:48
【问题描述】:

我有以下数据框:

structure(list(Z = c("1", "1", "1", "1", "1", "2", "2", "2", 
"2", "2", "3", "3", "3", "3", "3", "4", "4", "4", "4", "4"), 
    Y = c(0.12, 4, 1, 8, 0.25, 4, 0.06, 0.06, 8, 0.5, 0.12, 0.5, 
    0.06, 8, 16, 0.25, 0.12, 0.25, 4, 8), n = c(20L, 1L, 4L, 
    6L, 45L, 1L, 4L, 4L, 1L, 16L, 6L, 5L, 3L, 3L, 3L, 28L, 7L, 
    28L, 1L, 6L), X = c("E", "C", "C", "B", "A", "B", "E", "F", 
    "F", "A", "D", "F", "E", "B", "B", "B", "F", "E", "B", "D"
    ), value = c(14, 1, 1, 0, 45, 0, 3, 0, 0, 9, 0, 4, 3, 0, 
    0, 0, 1, 26, 0, 0)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -20L))

我使用以下代码来创建这两个图:

library(ggplot2)
ggplot(test_data, aes(X, factor(Y), fill = value))+
  geom_tile(color = "white")+
  facet_wrap(~Z, ncol = 2)+
  coord_fixed()

ggplot(test_data, aes(factor(Y), n))+
  geom_col()+
  facet_wrap(~Z)+
  theme(axis.text.y = element_blank(),
        axis.title = element_blank(),
        axis.ticks.y = element_blank())+
  coord_flip()

我想要做的是将每个多面图彼此相邻,并缩短条形图的宽度,如下所示:

我看到ggExtra 包有类似的东西,但只适用于散点图。有没有办法以类似的方式可视化 y 轴上每个类别的数量?

【问题讨论】:

  • 我不知道在你试图将不同的类(数值和因子)放在同一尺度上时是否可以使用构面。
  • @PoGibas 不一定要那样做——我只是想创建一个可视化的情节。如果您有任何建议,我很乐意听到!
  • @Haakonkas 听起来您想添加marginal histograms,尽管是平铺热图而不是散点图。是对的吗? (我强烈建议不要在这种情况下使用facet_wrapfacet_grid(Z ~ .) 在保持边缘边缘方面会做得更好)。
  • @Z.Lin 我试过这样做,但它并没有真正给我想要的东西。我只想要右侧的条 - 当我尝试它时,我只得到一个错误:zero_range(range) 中的错误:x 必须是长度 1 或 2

标签: r ggplot2


【解决方案1】:

gridExtra 包中有一个函数grid.arrange()(很好的解释[这里])1。这使您可以分别绘制绘图,然后将它们排列在一致的网格中,并在需要时单独调整每个绘图的大小。为此,您需要分别绘制每个方面,然后将它们传递给包。

假设您的每个方面都称为左上角的 A1,左下角的 B4。您的代码将如下所示:

grid.arrange(
   grobs = c(Al:B4)
   widths = c(2, 1, 2, 1),
   layout_matrix = rbind(c(1, 2, 3, 4),
                         c(5, 6, 7, 8))
)

使用这种格式,您可以单独标记您的地块,以克服比例类型的差异。

【讨论】:

    猜你喜欢
    • 2011-04-10
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2018-08-14
    相关资源
    最近更新 更多