如何在ggplot2的facet_zoom(x轴缩放)中自定义缩放区域ylim
解决ggplot2 facet_zoom x轴缩放同时自定义缩放子图y轴范围的问题
要实现只缩放x轴,同时单独设置缩放子图的y轴范围,你可以按以下步骤操作:
- 先正常创建带
facet_zoom(xlim = ...)的图表,同时开启scales = "free_y"让y轴在面板间独立:
library(ggplot2) library(ggforce) library(grid) # 模拟示例数据 set.seed(123) df <- data.frame( x = runif(1000, 0, 1), y = rnorm(1000, 0, 1) + 5 * x ) # 基础图表 + x轴缩放,开启y轴自由刻度 p <- ggplot(df, aes(x, y)) + geom_point(alpha = 0.3) + geom_smooth(method = "lm") + facet_zoom(xlim = c(0.05, 0.2), scales = "free_y")
- 通过
ggplot_build修改缩放面板的y轴范围:facet_zoom会生成两个面板,第一个是主视图,第二个是缩放视图。我们直接修改第二个面板的y轴参数即可:
# 构建图表对象 pb <- ggplot_build(p) # 自定义缩放子图的y轴范围,这里示例设为c(0, 2) pb$layout$panel_params[[2]]$y$limits <- c(0, 2) # 重新渲染图表 ggplot_gtable(pb) %>% grid.draw()
原理是:开启scales = "free_y"后,两个面板的y轴刻度是独立的,我们通过修改ggplot底层的面板参数,单独指定缩放面板的y轴范围,不会影响主视图的y轴显示。
内容的提问来源于stack exchange,提问作者GiacomoDB
相关产品推荐
相关产品推荐

