八年后,该ggforce
软件包提供了一个facet_zoom()
扩展,它是Hadley Wickham 建议的实现,以显示两个图(如Brian Diggs 的回答中所引用的)。
缩放面
library(ggforce)
ggplot(df) +
aes(x = b, y = a) +
geom_col() +
facet_zoom(ylim = c(0, 10))

不幸的是,当前版本 0.2.2 会ggforce
引发错误,coord_flip()
因此只能显示垂直条。
缩放的分面显示了小值的变化,但仍然包含大的 - 现在被裁剪的 - a4
条。该zoom.data
参数控制哪些值出现在缩放的方面:
library(ggforce)
ggplot(df) +
aes(x = b, y = a) +
geom_col() +
facet_zoom(ylim = c(0, 10), zoom.data = ifelse(a <= 10, NA, FALSE))

两个地块
哈德利·威克姆建议
我认为显示两个图更合适 - 一个是所有数据,一个是小值。
此代码创建两个图
library(ggplot2)
g1 <- ggplot(df) +
aes(x = b, y = a) +
geom_col() +
coord_flip()
g2 <- ggplot(df) +
aes(x = b, y = a) +
geom_col() +
coord_flip() +
ylim(NA, 10)
可以通过以下方式组合成一个情节
cowplot::plot_grid(g1, g2) # or ggpubr::ggarrange(g1, g2)

或者
gridExtra::grid.arrange(g1, g2) # or egg::ggarrange(g1, g2)

两个方面
这是由 Chase和 Brian Diggs 在他的回答中提出的,他解释了 Hadley 的建议使用
多面图,一张包含所有数据,一张放大特定区域
但到目前为止,还没有为这种方法提供任何代码。
由于没有简单的方法来单独缩放方面(参见相关问题,例如),因此需要对数据进行操作:
library(dplyr)
library(ggplot2)
ggplot() +
aes(x = b, y = a) +
geom_col(data = df %>% mutate(subset = "all")) +
geom_col(data = df %>% filter(a <= 10) %>% mutate(subset = "small")) +
coord_flip() +
facet_wrap(~ subset, scales = "free_x")
