ggplot图例中缺失因子水平填充显示空白的问题求助
ggplot图例中缺失因子水平填充显示空白的问题求助
我最近在用ggplot绘制频率分布图,想要让那些没有对应数据的因子类别(也就是被“丢弃”的水平)也能保留在图例里。我已经在scale_fill_manual()里设置了drop = FALSE,但奇怪的是,那个没有数据的类别(比如我示例里的Male)在图例里是空白的——明明我已经给它指定了填充颜色。
我写了一个和实际数据结构类似的示例代码,如下:
library(tidyverse) Data_Sample <- data.frame(CatType = c(rep("C1",3), rep("C2",7), rep("C3",8), rep("C4", 9), rep("C5", 2), rep("C6", 1)), Owner = c("Angela", "Karen", "Angela")) %>% mutate(Sex = ifelse(str_detect(CatType,"6"), "Male", "Female"), CatID = str_pad(row_number(), 2, pad="0"), Sex = factor(Sex, levels = c("Male", "Female"))) # 假设我的绘图代码类似这样 ggplot(Data_Sample, aes(x = CatType, fill = Sex)) + geom_bar(position = "dodge") + scale_fill_manual(values = c("Male" = "#2c3e50", "Female" = "#e74c3c"), drop = FALSE)
在这个示例里,只有CatType为C6的行是Male类别,但如果后续我做了数据筛选(比如排除了C6)或者分组统计后,Male没有对应的计数,它就会在图例里显示成空白块,可我明明给它指定了深灰色的填充色。
有没有办法解决这个问题,让没有对应数据的因子水平,在图例里也能正常显示我预先指定的填充颜色?
备注:内容来源于stack exchange,提问作者Dalton Linkus
相关产品推荐
相关产品推荐

