【问题标题】:Flip facet label and x axis with ggplot2用ggplot2翻转小平面标签和x轴
【发布时间】:2013-08-06 13:58:55
【问题描述】:

我希望翻转 1 行和 5 列的分面面板上的标签,以便分面标题出现在底部,而 x 轴出现在分面的顶部。

原因是我想在图表正下方的表格中重复使用这些标题。

所以在这个例子中......

library(ggplot2)

my.hist<-ggplot(diamonds, aes(clarity)) + geom_bar()

my.hist + facet_wrap( ~ cut, ncol=5) + coord_flip()

我希望“剪切”标签显示在图表下方。我在想 facet_grid 可能是关键,但这只是一个猜测。

有人知道怎么做吗?

【问题讨论】:

  • 我不知道这个问题的答案自thisthis 以来发生了变化。
  • 看起来是个坏消息...可能跑题了,但我想知道 lattice 是否提供此功能。

标签: r ggplot2 axis-labels facet-wrap


【解决方案1】:

获取情节下方的刻面条很容易,

library(gtable)
g <- ggplotGrob(p)

strips <- gtable_filter(g, "strip_t", trim=FALSE)
grid.newpage()
grid.draw(rbind(g, strips[3,], size="first"))

然而,轴需要更加小心,因为必须颠倒刻度线和标签的位置。你也许可以从这个开始,

tweak_axis <- function(a){
  inner <- a[["children"]]["axis"][[1]]
  inner[["grobs"]] <- rev(inner[["grobs"]])
  inner$grobs[[2]]$y <- inner$grobs[[2]]$y - unit(0.15, "cm")
  a[["children"]]["axis"][[1]] <- inner
  a
}

axes <- gtable_filter(g, "axis_b", trim=FALSE)
axes$grobs <- lapply(axes$grobs, tweak_axis)
grid.newpage()
grid.draw(axes)

编辑:基于上述,一个“完整”的解决方案可能是

grid.newpage()
g2 <- g
new_axes <- lapply(g2$grobs[grepl("axis_b", g2$layout$name)], tweak_axis)
g$grobs[grepl("strip_t", g$layout$name)] <- new_axes 
g$grobs[grepl("axis_b", g$layout$name)] <- g2$grobs[grepl("strip_t", g2$layout$name)] 
# heights should be changed too, but it's kind of ok here
xlab <- 7; title <- 1:2
grid.draw(rbind(g[xlab,], g[-c(title, xlab), ], size="last"))

(有明显的警告)

【讨论】:

  • kohske 为轴发布了一些技巧:rpubs.com/kohske/dual_axis_in_ggplot2
  • 如果我使用"strip_t" 然后运行strips 我得到输出TableGrob (6 x 5) "layout": 0 grobs。这是预期的效果吗?我问是因为我在最终输出中也遇到了错误,Error in mmm &lt; each : comparison of these types is not implemented。但是,我将您代码中的p 替换为我的my.plot。这是正确的用法吗?
  • 你应该在那个 gtable 中有 5 个 grobs,确保 p 是你的情节更新到包括第二行 (facet_wrap)。我已更新代码以处理其他错误。
  • 好的,谢谢您指出这一点。我不得不重新分配到更新的情节,这提供了预期的输出。我现在得到了构面标签的预期输出,我将尝试追踪倒转刻度线。很高兴让 gridExtra 作者回答我的问题。非常感谢!
  • 这太棒了!我感谢您将该功能包装到一个函数中。它肯定看起来像一些内部代码。我将不得不对此进行试验,以便了解您正在操作的内部结构,然后参数化此函数。但是有一个问题,当使用该函数的代码中没有传递任何参数时,该函数如何知道(a)?再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多