gpt4 book ai didi

r - 使用 ggplot2 翻转刻面标签和 x 轴

转载 作者:行者123 更新时间:2023-12-04 18:09:30 27 4
gpt4 key购买 nike

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

原因是我想为直接位于图表下方的表格重用这些标题。

所以在这个例子中...

library(ggplot2)

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

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

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

有谁知道如何做到这一点?

最佳答案

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

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"))

enter image description here

(有明显的警告)

关于r - 使用 ggplot2 翻转刻面标签和 x 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18065319/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com