如何使用facet_zoom实现单图内多目标区域的放大展示?
哈哈,我懂你遇到的问题了——用|把两个物种连起来确实会把整个数据集都选中,根本达不到分别放大的效果。其实ggforce的facet_zoom本身就支持多区域放大,只要调整参数就能实现你想要的上下排列效果,不用复杂的数据拼接~
直接上可行的代码:
library(ggplot2) library(ggforce) ggplot(iris, aes(Petal.Length, Petal.Width, colour = Species)) + geom_point() + facet_zoom( x = Species, # 按物种因子来定义放大区域 zoom.xy = Species %in% c("setosa", "virginica"), # 指定要放大的两个物种 split = TRUE, # 把每个放大区域拆成单独面板 ncol = 1 # 让所有面板(主图+两个放大图)上下排列 )
给你解释下关键参数:
x = Species:告诉facet_zoom我们要基于Species这个分类变量来划分放大区域;zoom.xy:用来筛选需要单独放大的类别,这里只选中setosa和virginica;split = TRUE:默认情况下多个放大区域会合并成一个面板,开启这个参数就能把它们拆成独立的面板;ncol = 1:强制所有面板(包括显示完整数据的主面板)按单列排列,正好符合你要的上下布局。
如果你的需求更复杂(比如想调整主面板和放大面板的位置、比例),还可以用facet_zoom的zoom.size参数来调整放大面板的高度,比如加个zoom.size = 0.3就能让放大面板占主面板高度的30%。
内容的提问来源于stack exchange,提问作者user572549




