考虑一些facet_grid情节
mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point()
mt + facet_grid(vs ~ am, scales = "free")
Run Code Online (Sandbox Code Playgroud)
想象一下,我只想放大上图中的顶行,只显示3到4之间的y轴值.coord_cartesian()如果它们没有刻面或我想放大所有绘图,我可以这样做,但是在这种情况下没有一个好的解决方案.我想我可以先将数据子集化,但这是有充分理由的禁忌(例如,会抛弃任何统计层等).
(请注意,问题与此有关:R:{ggplot2}:如何/我可以独立调整facet_grid图上的x轴限制吗?但是那里的答案不适用于此目的.)
Hol*_*ing 10
所以,这是一个老问题,但我想分享一种我找到的方式.最简单的似乎是为您的数据添加人工点,例如,在每个绘图的数据的左下角和右上角.将此信息放入单独的数据框中,然后使用参数alpha = 0将其添加到使用geom_point的图中,以使点不可见.根据您的需要,将facet_wrap中轴的缩放设置为"free_x"或"free_y".
现在ggplot分别缩放每个方面以适应您添加的不可见点.有点hacky,但工作得很好.
老帖子,但我正在寻找同样的东西,并没有真正找到任何东西 - [也许这是一种方式使用facet_grid()为y轴设置两个因变量的限制
解决方案不是非常优雅/高效,但我认为它的工作原理 - 基本上创建两个具有不同coord_cartesian调用的图并交换整个grobs.
# library(ggplot2)
# library(gtable)
# Plot
mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point()
# --------------------------------------------------------------------------------
p1 <- mt + facet_grid(vs ~ am, scales = "free") + coord_cartesian(ylim = c(1,6))
g1 <- ggplotGrob(p1)
p2 <- mt + facet_grid(vs ~ am, scales = "free") + coord_cartesian(ylim = c(3,5))
g2 <- ggplotGrob(p2)
# ----------------------------------------------------------
# Replace the upper panels and upper axis of p1 with that of p2
# Tweak panels of second plot - the upper panels
g1[["grobs"]][[6]] <- g2[["grobs"]][[6]]
g1[["grobs"]][[8]] <- g2[["grobs"]][[8]]
#Tweak axis
g1[["grobs"]][[4]] <- g2[["grobs"]][[4]]
grid.newpage()
grid.draw(g1)
Run Code Online (Sandbox Code Playgroud)