如何在ggplot2面积图中选择性移除指定图例标签
在ggplot2中仅保留指定图例项(含颜色方块与标签)
问题场景
用ggplot2画面积图时,图例有A、B、C、D四个标签,想只留B和D的完整图例(颜色方块加标签),同时绘图区域保持不变。试过把A、C的标签设为空字符串,结果只隐藏了标签,颜色方块还在,求解决办法。
原始代码
library(ggplot2) library(tibble) tibble( x = rep(1:16, each = 4), y = rnorm(64, mean = 3), labels = factor(rep(1:4, 16)) ) %>% ggplot(aes(x = x, y = y, fill = labels)) + scale_fill_discrete(labels = c("A", "B", "C", "D")) + geom_area()
无效尝试代码
scale_fill_discrete(labels = c("", "B", "", "D")) +
解决方法
方法1:用scale_fill_discrete的breaks参数
直接通过breaks指定要显示的图例项,过滤掉A、C对应的因子水平,这样图例里只会保留B和D的完整项,绘图区域完全不受影响。
修改后的代码:
library(ggplot2) library(tibble) tibble( x = rep(1:16, each = 4), y = rnorm(64, mean = 3), labels = factor(rep(1:4, 16)) ) %>% ggplot(aes(x = x, y = y, fill = labels)) + scale_fill_discrete( labels = c("A", "B", "C", "D"), breaks = c("2", "4") # 对应原始因子的2(B)和4(D)水平 ) + geom_area()
注意:breaks里的值要和你的labels因子原始水平对应,这里原始因子是1-4,所以用"2"和"4"指定保留B、D的图例。
方法2:提前修改因子水平(可选)
如果后续不需要A、C的因子水平,也可以先修改数据里的因子,但这种方式会让A、C的填充颜色消失,要是你需要保留绘图区域的颜色(只隐藏图例),优先用方法1。
代码示例:
library(ggplot2) library(tibble) library(dplyr) tibble( x = rep(1:16, each = 4), y = rnorm(64, mean = 3), labels = factor(rep(1:4, 16), labels = c("A", "B", "C", "D")) ) %>% mutate(labels = fct_recode(labels, .missing = "A", .missing = "C")) %>% # 将A、C设为缺失 ggplot(aes(x = x, y = y, fill = labels)) + scale_fill_discrete(na.value = "gray") + # 可选:给A、C设置填充色 geom_area()
内容的提问来源于stack exchange,提问作者at.
相关产品推荐
相关产品推荐

